A9S*_*9S6 10 .net c# wcf windows-services callback
我有一个Windows服务,它取一堆文件的名称并对它们进行操作(zip/unzip,更新db等).根据发送到服务的文件的大小和数量,操作可能需要一些时间.
(1)向该服务发送请求的模块将等待处理文件.我想知道是否有一种方法可以在服务中提供一个回调,它将在完成处理文件时通知调用模块.请注意,多个模块可以一次调用服务来处理文件,因此服务需要提供某种TaskId我猜.
(2)如果调用了一个服务方法并且正在运行另一个对同一服务的调用,那么该调用将如何处理(我认为只有一个与该服务相关联的线程).我已经看到,当服务在处理方法时花费时间时,与服务相关联的线程开始增加.
mar*_*c_s 14
WCF确实提供了双工绑定,允许您指定回调契约,以便服务可以回调给调用客户端进行通知.
但是,在我看来,这种机制相当薄弱,并不值得推荐.
在这种情况下,当调用导致相当长的运行操作发生时,我会做这样的事情:
如果你想坚持使用HTTP/NetTcp绑定,我会:
因此,在您的情况下,您可以删除压缩某些文件的请求.该服务将启动并完成其工作并将生成的ZIP存储在临时位置.然后,客户端可以检查ZIP是否准备就绪,如果是,则检索它.
这在每个Windows服务器计算机中都存在的消息队列(MSMQ)上工作得更好(但很多人似乎并不知道或使用它):
通过阅读优秀的MSDN文章Foudnations:构建队列WCF响应服务,了解如何有效地完成所有这些- 强烈推荐!
在我看来,基于消息队列的系统往往比基于双工/回调合约的系统更稳定,更不容易出错.
| 归档时间: |
|
| 查看次数: |
8721 次 |
| 最近记录: |