我需要在Visual Studio 2003下的VB.net中构建一个Windows服务。这个Windows服务应该从本地文件夹读取平面文件(大约一百万条记录的大文件)并将其上传到相应的数据库表。这应该在回滚模式(数据库事务)中完成。在将数据传输到表时,服务还应该监听其他客户端请求。因此,如果在客户端请求取消操作之间,则服务应该回滚事务并向客户端提供反馈。此Windows服务还会持续写入有关状态和错误记录的两个日志文件。 我的客户是ASPX页面(一个网站)。
有人可以帮我解释如何在Windows服务中组织和实现此功能(同时处理和侦听其他客户端请求。例如取消请求)。
您也可以建议我实现这一目标的理想方式(例如,最好将其实现为Web服务或Windows服务,或者只是远程对象或其他方式)。
提前感谢大家的帮助!
答案 0 :(得分:2)
您可以构建您的服务以生成繁重的“工作线程”,同时它只是监听其他请求。因为未来的调用可能需要处理当前的工作者,所以这可能比使用IIS将其构建为Web服务更好。
我设置的方式是:服务主线程正在侦听端口或管道进行通信。当它调用过程数据时,它会生成一个工作线程,给它一些“状态标记”(可能就像对布尔变量的引用一样简单),它会定期检查它以确保它仍然在运行。线程启动,服务返回监听(网络类维护接收数据的缓冲区,因此只有在“超时”时调用才会失败)。
如果服务收到中止调用,它会将令牌设置为“取消”值。工作线程将在下次轮询时读取该值并获取消息,回滚事务并死亡。
这可以设置为让多个工作人员同时处理多个文件,属于由他们的IP键入的呼叫者或来回传递的一些独特的“会话”标识符。
答案 1 :(得分:0)
您可以像FTP
那样设计您的工作。 FTP
使用两个端口,一个用于命令,另一个用于数据传输。
您可以考虑两个类,一个用于命令解析,另一个用于数据传输,每个类在不同的线程上。
在线程之间使用通信通道(如特权队列)。如果您转到Syste.Collections.Concurrent
以及.NET 4.0
等更多线索功能,则可以使用CancellationTokens
WCF
优于Web服务,但将其与Windows服务进行比较需要更多项目细节。通常,与Windows服务相比,WCF
更容易实现。