【问题标题】:submitting to and monitoring an unreliable webservice提交和监控不可靠的网络服务
【发布时间】:2009-06-23 10:21:32
【问题描述】:

我正在构建一个 ASP.NET 网站,该网站将从用户那里收集数据并将其提交给第 3 方网络服务。网络服务有些不可靠,因此有一个备份服务。

如果对主要服务的调用失败(超时或其他错误),那么我需要在静态类中稍微翻转一下,这将使系统跳闸以使用辅助服务。

此时,我需要开始轮询主服务(使用虚拟数据)以查看它是否已备份(此时我将收到一个 OK 代码作为回报)。在这一点上,我需要将位翻转,以便网站再次开始使用主服务。

我已经阅读了这个Should I use a Windows Service or an ASP.NET Background Thread?,我认为将代码分离到 Windows 服务中将是执行轮询的最干净的方法,但是我将如何与 Web 应用程序进行通信。

我的一个想法是公开一个 Web 服务,Windows 服务可以使用该 Web 服务与 Web 应用程序进行通信,但这看起来既混乱又过度。

感谢您在执行类似任务时的想法和经验。

谢谢

【问题讨论】:

    标签: asp.net web-services multithreading windows-services polling


    【解决方案1】:

    我认为 Windows 服务肯定是要走的路。

    至于服务与您的网站之间的通信,最佳答案取决于您的解决方案的规模和规模。如果您正在构建需要可靠的东西,我建议您在 ASP.NET 站点和 Windows 服务之间实现某种队列。您在这里也有很多选择,具体取决于预算和能力:BizTalk、MSMQ 和 SQL Server 队列 (SSIS)。或者,如果您正在寻找更小规模的东西,我建议您将其粘贴到某个数据库表中。

    我会避免使用文件系统上的文件,因为您会遇到文件锁定和多线程问题。我也会避免直接与服务通信,因为如果服务因任何原因失败,您可能会丢失内存中的队列。

    编辑添加:

    如果此处不考虑可靠性,您可以使用 WPF 命名管道托管服务在您的网站和 Windows 服务之间进行通信。这避免了经典 Web 服务中通常涉及的大部分开销,并且速度惊人。唯一的缺点是自托管 WPF 服务很棘手,并且很难保持服务正常运行。

    【讨论】:

    • 嗨,John,第 3 方系统是标准的 .NET Web 服务 (.asmx),如果请求超时或错误,我计划届时将当前请求重新提交到辅助服务
    • 是的,我明白 - 我是说您仍然需要在您的网站和 Windows 服务之间进行可靠的传输。我完全同意使用 Windows 服务是正确的方法,并且正在回答您问题的“我如何与 Web 应用程序通信”部分 :)
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    相关资源
    最近更新 更多