我在一台计算机上部署了 ASP.NET Web 应用程序,在另一台计算机上部署了 C# Windows 服务。 每次当用户通过网络应用程序发布新帖子时,我想立即向 Windows 服务发送信号以开始处理该信息。
我实际上不需要传递任何参数 - 只是一个信号,表明是时候开始处理数据库中存储的新数据 block 了。
如果 Windows 服务能够在大约 200 毫秒内收到来自 Web 应用程序的处理信号,那就太好了。
我最初的选择是将WCF嵌入到Windows服务中并使用NetTcpBinding。 然而,WCF 被证明是一个不幸的选择:
1)它需要大量不平凡的丑陋编码/配置。
2) 速度非常慢 - 目前,为了进行简单的调用,从一台机器调用到另一台机器需要 20 秒(!),而这些机器之间的 ping 需要不到 1 毫秒。
3) 微软的 WCF 团队对开发者的投诉[缺乏]回复,这很可悲(Google http://www.google.com/search?q=wcf+client+slow 看看你自己)。
所以我正在寻找一个好的替代方案。
目前我的选择#1是System.Net.Sockets.Socket: http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx
文章中的示例似乎很简单,并且没有 WCF 怪物那么复杂。
你认为这会是一个不错的选择吗?如果是的话——有什么哥达式的吗?
有更好的方法吗?
操作系统:Windows Server 2008(生产)、Windows 7(开发)。
我已经解决了对多个请求进行排队的问题:如果 winservice 收到多个处理请求,它只会处理数据,直到所有新数据完全处理为止。
更新 1:为什么投反对票?
更新2: 偶尔信号丢失也没关系。无论如何,我每分钟都会重新处理 winservice 中的新帖子。我只是想确保大多数帖子在用户保存后几乎立即得到处理。
最佳答案
最好使用 MSMQ 对将由后端服务处理的消息进行排队。当您确实计划不丢失任何消息/信号时,Tcp 并不可靠。
关于c# - 将信号从一台计算机上的 ASP.NET 应用程序传递到另一台计算机上的 .NET Windows 服务的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6983937/