Asp.net 如何使Windows服务在处理当前请求时侦听其他请求?
我需要在Visual Studio 2003下的VB.net中构建一个Windows服务。这个Windows服务应该从本地文件夹中读取平面文件(大约一百万条记录的巨大文件),并将其上传到相应的数据库表中。这应该在回滚模式下完成(数据库事务)。在将数据传输到表时,服务还应该侦听其他客户端请求。因此,如果在客户端请求取消操作之间,那么服务应该回滚事务并向客户端提供反馈。此windows服务还不断向两个日志文件写入有关状态和错误记录的信息。 我的客户是ASPX页面(一个网站) 有人能帮我解释一下如何在windows服务中组织和实现此功能(同时处理和侦听其他客户端请求。例如取消请求) 另外,您能否建议我实现这一点的理想方法(比如最好将其实现为web服务或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页面(一个网站) 有人能帮我解释一下如何在
提前感谢大家的帮助 您可以构建您的服务,以生成执行繁重任务的“工作线程”,而它只是侦听其他请求。因为未来的调用可能必须处理当前的工作程序,所以这可能比使用IIS将其架构为web服务更好 我的设置方式是:服务主线程正在监听端口或管道上的通信。当它得到一个处理数据的调用时,它会生成一个工作线程,给它一些“状态标记”(可以像引用布尔变量一样简单),它会定期检查以确保它仍然在运行。线程启动后,服务返回到侦听(网络类维护接收数据的缓冲区,因此只有在调用“超时”时才会失败) 如果服务接收到中止调用,它会将令牌设置为“取消”值。工作线程将在下一次轮询时读取该值并获取消息,回滚事务并终止
这可以设置为让多个工作人员同时处理多个文件,这些文件属于通过IP或您来回传递的某个唯一“会话”标识符键入的呼叫者。您可以像
FTP
那样设计您的工作<代码>FTP使用两个端口,一个用于命令,另一个用于数据传输
可以考虑两个类,一个用于命令解析,另一个用于数据传输,每个线程在单独的线程上。 在线程之间使用通信通道(如特权队列)。如果移动到
.NET 4.0
,您可以使用系统集合.Concurrent
和更多线程功能,如取消令牌
WCF
比web服务有优势,但将其与windows服务进行比较需要更多项目细节。一般来说,与windows服务相比,WCF
更易于实现