c# - 将信号从一台计算机上的 ASP.NET 应用程序传递到另一台计算机上的 .NET Windows 服务的最佳方法是什么?

标签 c# asp.net wcf sockets windows-services

我在一台计算机上部署了 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/

相关文章:

c# - C#中如何按日期时间对集合进行排序

c# - 从netcore C#控制台应用程序调用rust dll时发生System.BadImageFormatException

javascript - 关于从 ASP .NET 用户控件迁移到 .NET 3.5 母版页技术的问题

c# - 关于 Java 客户端调用 WCF

c# - 在子对象属性上使用 Sum 的 LINQ to Entities 查询问题

c# - 如何在从抽象派生的泛型类中隐式实现方法?

C#函数返回数组

c# - 将 Mysql 数据源与 asp.net 中的数据 GridView 列绑定(bind)

java - 从 Java 调用 WCF 服务的技术

java - 将原始 XmlElement 从 WCF 传递到 Apache CXF 客户端 (basicHttpBinding)