【问题标题】:What’s the best way to pass a signal from ASP.NET app on one machine to .NET Windows Service on another machine?将信号从一台机器上的 ASP.NET 应用程序传递到另一台机器上的 .NET Windows 服务的最佳方式是什么?
【发布时间】:2011-08-08 14:49:39
【问题描述】:

我有一个部署在一台机器上的 ASP.NET Web 应用程序和部署在另一台机器上的 C# windows 服务。 每次当用户通过网络应用发布新帖子时,我想立即向 Windows 服务发送信号以开始处理该信息。

我真的不需要传递任何参数 - 只是一个信号,表明是时候开始处理存储在数据库中的新数据块了。

如果 Windows 服务在 ~200 毫秒内收到来自 Web 应用程序的处理信号,那就太好了。

我最初的选择是将 WCF 嵌入 Windows 服务并使用 NetTcpBinding。 然而,WCF 被证明是一个不幸的选择:

1) 它需要大量不平凡的丑陋编码/配置。

2) 它非常慢 - 目前为了进行简单的调用,从一台机器调用到另一台机器需要 20 秒 (!),而这些机器之间的 ping 时间不到 1 毫秒。

3) 微软的 WCF 团队在 [缺乏] 对开发者投诉的回复方面很可悲(谷歌 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 monstrosity 简单且简单。

您认为这是一个不错的选择吗?如果是,有没有 gothas?

有更好的方法吗?

操作系统:Windows Server 2008(生产)、Windows 7(开发)。

我已经解决了多个请求排队的问题:如果 winservice 接收到多个处理请求,它只会处理数据,直到所有新数据都被完全处理。

更新 1:为什么要投反对票?

更新 2: 偶尔松散信号也可以。无论如何,我每分钟都会重新处理 winservice 中的新帖子。我只是想确保大多数帖子在用户保存后几乎立即得到处理。

【问题讨论】:

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


    【解决方案1】:

    最好使用 MSMQ 对将由后端服务处理的消息进行排队。当您计划不丢失任何消息/信号时,Tcp 不可靠。

    【讨论】:

    • 我已经解决了多个请求排队的问题:如果 winservice 接收到多个处理请求,它会简单地处理数据,直到所有新数据都被完全处理。我只需要快速通知 winservice 什么时候开始处理。
    • 我同意 Message Queue 可能是最强大的解决方案。您的服务可以侦听队列,当消息出现时,它可以将它们拉出来并处理它们。这可以异步完成。 Web 应用程序的唯一义务是将消息存入队列,这很容易。
    • 我应该在什么服务器上托管 Message Queue:在服务器上使用我的 Web 应用程序(客户端)还是在服务器上使用我的 winservice(服务器)?
    • 出于性能原因,通常最好在与 winservice 相同的服务器上创建消息队列。在本地检索消息比远程检索更容易
    【解决方案2】:

    你考虑过.NET Remoting吗?官方已弃用它以支持 WCF,而当涉及到企业系统时,这种弃用可能是有充分理由的。不过,我当前的项目(.net 3.5)使用它没有问题。

    我与您一样对 WCF 感到沮丧:似乎没有快速简便的方法来启动和运行它;启动一个简单的 Hello World Web 服务所需的配置量令人沮丧。但是,我怀疑/希望 WCF 中某处存在阻力最小的路径,而我只是没有足够的实践经验来了解它。

    【讨论】:

      【解决方案3】:

      我会看看MassTransitNServiceBus 之类的东西。

      特别是如果这是您计划在更多地方做的事情或计划做很多事情的时候。我相信它们都可以通过 MSMQ,并且应该为在应用程序的各个部分之间传输消息提供可靠的服务总线。

      【讨论】:

        【解决方案4】:

        如何从您的 ASP 代码进行 UDP 广播。 UDP 本质上是不可靠的,但在 LAN 上几乎不是问题。 ASP 代码不能确定消息是否被传递并被执行,但我认为这不是您想要或需要的。 最重要的是,UDP 广播的成本非常低,而且发送和接收速度非常快。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-10
          • 1970-01-01
          • 2019-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多