我有一个运行一些任务的Windows服务。我需要在它的任务列表中添加一些网络功能。
以下是网络逻辑的样子:
+-------------------+ +---------------+
| | send request | |
| | for some data | |
| | <--------------------------------------------- | |
| | | |
| | process request | Client |
| Windows Service | | Application |
| | send response | |
| | ---------------------------------------------> | |
| | | |
| | process response | |
+-------------------+ +---------------+注意:可以有多个客户端应用程序同时请求数据。
注意:每个客户端应用程序可以同时发送多个数据请求。
注意: Windows服务和客户端应用程序可以驻留在同一个网络中,也可以驻留在不同的网络上。
下面是Windows服务的基本布局:
class Processor : System.ServiceProcess.ServiceBase
{
private System.Timers.Timer Timer1 = null;
private System.Timers.Timer Timer2 = null;
private System.Timers.Timer Timer3 = null;
protected override void OnStart(string[] args)
{
Timer1 = new System.Timers.Timer();
Timer1.Interval = ...;
Timer1.AutoReset = true;
Timer1.Elapsed += new ElapsedEventHandler(...);
Timer1.Start();
Timer2 = new System.Timers.Timer();
Timer2.Interval = ...;
Timer2.AutoReset = true;
Timer2.Elapsed += new ElapsedEventHandler(...);
Timer2.Start();
Timer3 = new System.Timers.Timer();
Timer3.Interval = ...;
Timer3.AutoReset = true;
Timer3.Elapsed += new ElapsedEventHandler(...);
Timer3.Start();
// I was thinking of creating a new Task (System.Threading.Tasks.Task) or Timer (System.Timers.Timer) here to handle the networking-related logic.
}
protected override void OnStop()
{
Timer1.Stop();
Timer1.Close();
Timer2.Stop();
Timer2.Close();
Timer3.Stop();
Timer3.Close();
}
}我一直在阅读微软的网络编程文档,但我仍然不知道哪一门课最适合我的情况。
我一直在考虑使用的课程是:
TcpListener和TcpClient类是套接字类的包装器。它们似乎隐藏了许多实现细节,使代码更容易理解。套接字类提供了大量的功能,但它可以处理多客户端连接。TcpListener能够处理多个客户端,还是只能在一个时间侦听一个客户端?
什么样的社交课最适合我的情况?我如何保证请求将得到响应的方式,同时也保证非网络相关的任务将继续而不被阻止?
发布于 2020-03-11 19:09:36
注意: Windows服务和客户端应用程序可以驻留在同一个网络中,也可以驻留在不同的网络上。
至少在这里我可以给你一个半好的答案。网络类不关心另一端是在同一台计算机上,还是在同一个交换机上,还是在旅行者2探测器上。如果它对本地主机有效,通常是网络管理员的任务,以确保有一条路径。
获得跨网络可达的服务--特别是在互联网上,直接进入服务器托管。Wich与编程是完全不同的话题。根据环境的实际情况,必要的更改可以从“无”更改到“服务器设计的总体更改”。但是,它应该更多地放在“无”方面,因为这是服务器管理员的工作,以确保服务器是可访问的。
发布于 2020-03-13 15:59:30
我做了些调查我错了。TcpListener类可以一次处理多个挂起的客户端连接。
因为消息应该很小,所以与HTTP相关的类看起来有点过火了。
由于我的需求相对简单,而且我宁愿坚持更简单的设计,所以我将使用TcpListener和TcpClient类。
https://stackoverflow.com/questions/60642541
复制相似问题