我正在构建一个ASP.NET网站,它将从用户收集数据并将其提交给第三方Web服务。 Web服务有点不可靠,因此有一个备份服务。
如果对主服务的调用失败(超时或其他一些错误),那么我需要在静态类中翻转一下,这会使系统跳闸以使用辅助服务。
此时,我需要开始轮询主服务(使用虚拟数据)以查看它是否已备份(此时我将收到一个OK代码作为回报)。此时我需要翻回一下,以便网站再次开始使用主服务。
我已经阅读了这个Should I use a Windows Service or an ASP.NET Background Thread?,我认为将代码分离到Windows服务中将是执行轮询的最干净方法,但是我将如何与Web应用程序进行通信。< / p>
我曾经想到的一个想法是公开Windows服务可以用来与webapp通信的网络服务,但这似乎既麻烦又过度杀人。
我很感激您执行类似任务的想法和经验。
由于
答案 0 :(得分:1)
我认为Windows服务是必经之路。
至于服务与您的网站之间的通信,最佳答案取决于您的解决方案的大小和规模。如果您正在构建需要可靠的东西,我建议您在ASP.NET站点和Windows服务之间实现某种队列。这里有很多选项,具体取决于预算和能力:BizTalk,MSMQ和SQL Server队列(SSIS)。或者,如果您正在寻找规模较小的东西,我建议您将其粘贴到某个数据库表中。
我会避免在文件系统上使用文件,因为您会遇到文件锁和多线程的问题。我也会避免直接与服务通信,因为如果服务因任何原因失败,您可能会丢失内存中的队列。
已编辑添加:
如果此处不关注可靠性,您可以使用WPF命名管道托管服务在您的网站和Windows服务之间进行通信。这避免了通常涉及经典Web服务的大量开销,并且速度惊人。唯一的缺点是自托管WPF服务很棘手,很难保持服务。