【发布时间】:2017-11-26 04:45:15
【问题描述】:
我编写了一个小型 wcf 服务应用程序,它从 msmq 读取消息。并在 IIS-7 中托管 wcf 服务。问题是我只有在 IIS 中单击浏览按钮时才能阅读该消息。没有引用此服务 uri 的客户端应用程序。我需要 wcf 服务始终自动连续运行。
是否可以在没有任何用户交互的情况下连续运行托管在 IIS 中的 WCF 服务?
【问题讨论】:
标签: wcf iis msmq wcf-binding msmq-wcf
我编写了一个小型 wcf 服务应用程序,它从 msmq 读取消息。并在 IIS-7 中托管 wcf 服务。问题是我只有在 IIS 中单击浏览按钮时才能阅读该消息。没有引用此服务 uri 的客户端应用程序。我需要 wcf 服务始终自动连续运行。
是否可以在没有任何用户交互的情况下连续运行托管在 IIS 中的 WCF 服务?
【问题讨论】:
标签: wcf iis msmq wcf-binding msmq-wcf
您是否已将应用程序池配置为连续运行?这意味着至少禁用所有回收机制,将空闲超时设置为 0,并设置 Start Mode == Always。
您可能会受益于使用Application Initialization 模块来确保服务始终保持激活状态。
【讨论】:
当您在 IIS 中托管任何内容时,它始终会持续运行,除非您的站点处于空闲状态。IIS 有一个默认设置,即站点空闲超过 20 分钟,它将关闭站点。此设置位于应用程序池高级如下图设置
您可以将应用程序池空闲超时设置为零,这样它就永远不会 关闭
还想知道您究竟是如何编写从 MSMQ 服务中提取数据的逻辑。如果您没有查看详细信息,在 WCF 或 Asp.net 中运行重复的后台作业并不简单。如果您正在使用定时器线程,它可能不会一直工作。 如果您使用类似 hangfire 的东西,那就没问题。但您必须确保它始终可以正常工作并检查所有边缘情况,例如 this 和 this
所以我们的收获是
如果您需要后台任务,请改用 Windows 服务。或者您使用 hangfire 或 this nuget 之类的东西,并在相应的应用程序池中将 IdletimeOut 设置为 0
【讨论】: