Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何使Windows服务在处理当前请求时侦听其他请求?_Asp.net_Vb.net_Windows Services_Oracle11g_.net Remoting - Fatal编程技术网

Asp.net 如何使Windows服务在处理当前请求时侦听其他请求?

Asp.net 如何使Windows服务在处理当前请求时侦听其他请求?,asp.net,vb.net,windows-services,oracle11g,.net-remoting,Asp.net,Vb.net,Windows Services,Oracle11g,.net Remoting,我需要在Visual Studio 2003下的VB.net中构建一个Windows服务。这个Windows服务应该从本地文件夹中读取平面文件(大约一百万条记录的巨大文件),并将其上传到相应的数据库表中。这应该在回滚模式下完成(数据库事务)。在将数据传输到表时,服务还应该侦听其他客户端请求。因此,如果在客户端请求取消操作之间,那么服务应该回滚事务并向客户端提供反馈。此windows服务还不断向两个日志文件写入有关状态和错误记录的信息。 我的客户是ASPX页面(一个网站) 有人能帮我解释一下如何在

我需要在Visual Studio 2003下的VB.net中构建一个Windows服务。这个Windows服务应该从本地文件夹中读取平面文件(大约一百万条记录的巨大文件),并将其上传到相应的数据库表中。这应该在回滚模式下完成(数据库事务)。在将数据传输到表时,服务还应该侦听其他客户端请求。因此,如果在客户端请求取消操作之间,那么服务应该回滚事务并向客户端提供反馈。此windows服务还不断向两个日志文件写入有关状态和错误记录的信息。 我的客户是ASPX页面(一个网站)

有人能帮我解释一下如何在windows服务中组织和实现此功能(同时处理和侦听其他客户端请求。例如取消请求)

另外,您能否建议我实现这一点的理想方法(比如最好将其实现为web服务或windows服务,或者只是远程对象或其他方式)


提前感谢大家的帮助

您可以构建您的服务,以生成执行繁重任务的“工作线程”,而它只是侦听其他请求。因为未来的调用可能必须处理当前的工作程序,所以这可能比使用IIS将其架构为web服务更好

我的设置方式是:服务主线程正在监听端口或管道上的通信。当它得到一个处理数据的调用时,它会生成一个工作线程,给它一些“状态标记”(可以像引用布尔变量一样简单),它会定期检查以确保它仍然在运行。线程启动后,服务返回到侦听(网络类维护接收数据的缓冲区,因此只有在调用“超时”时才会失败)

如果服务接收到中止调用,它会将令牌设置为“取消”值。工作线程将在下一次轮询时读取该值并获取消息,回滚事务并终止


这可以设置为让多个工作人员同时处理多个文件,这些文件属于通过IP或您来回传递的某个唯一“会话”标识符键入的呼叫者。

您可以像
FTP
那样设计您的工作<代码>FTP使用两个端口,一个用于命令,另一个用于数据传输

可以考虑两个类,一个用于命令解析,另一个用于数据传输,每个线程在单独的线程上。 在线程之间使用通信通道(如特权队列)。如果移动到

.NET 4.0
,您可以使用
系统集合.Concurrent
和更多线程功能,如
取消令牌

WCF
比web服务有优势,但将其与windows服务进行比较需要更多项目细节。一般来说,与windows服务相比,
WCF
更易于实现