1

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

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

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

我读过这篇文章我应该使用 Windows 服务还是 ASP.NET 后台线程?而且我认为将代码分离到 Windows 服务中将是执行轮询的最干净的方法,但是我将如何与 Web 应用程序进行通信。

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

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

谢谢

4

1 回答 1

1

我认为 Windows 服务绝对是要走的路。

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

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

编辑添加:

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

于 2009-06-23T10:35:09.557 回答