【问题标题】:How to make WCF service run continuously in IIS?如何让 WCF 服务在 IIS 中连续运行?
【发布时间】:2017-11-26 04:45:15
【问题描述】:

我编写了一个小型 wcf 服务应用程序,它从 msmq 读取消息。并在 IIS-7 中托管 wcf 服务。问题是我只有在 IIS 中单击浏览按钮时才能阅读该消息。没有引用此服务 uri 的客户端应用程序。我需要 wcf 服务始终自动连续运行。

是否可以在没有任何用户交互的情况下连续运行托管在 IIS 中的 WCF 服务?

【问题讨论】:

    标签: wcf iis msmq wcf-binding msmq-wcf


    【解决方案1】:

    您是否已将应用程序池配置为连续运行?这意味着至少禁用所有回收机制,将空闲超时设置为 0,并设置 Start Mode == Always。

    您可能会受益于使用Application Initialization 模块来确保服务始终保持激活状态。

    【讨论】:

    • 谢谢。根据您的建议,我在 IIS8 中尝试了应用程序初始化模块,并将高级设置的空闲超时更改为 0,并将启动模式更改为始终。现在回收后它会立即读取消息。当我在 IIS8 或更高版本中托管 WCF 服务时,是否需要更改任何其他配置。我只是想弄清楚要遵循的标准程序。我没有找到任何关于此的文章。
    【解决方案2】:

    当您在 IIS 中托管任何内容时,它始终会持续运行,除非您的站点处于空闲状态。IIS 有一个默认设置,即站点空闲超过 20 分钟,它将关闭站点。此设置位于应用程序池高级如下图设置

    您可以将应用程序池空闲超时设置为零,这样它就永远不会 关闭

    还想知道您究竟是如何编写从 MSMQ 服务中提取数据的逻辑。如果您没有查看详细信息,在 WCF 或 Asp.net 中运行重复的后台作业并不简单。如果您正在使用定时器线程,它可能不会一直工作。 如果您使用类似 hangfire 的东西,那就没问题。但您必须确保它始终可以正常工作并检查所有边缘情况,例如 thisthis

    所以我们的收获是

    如果您需要后台任务,请改用 Windows 服务。或者您使用 hangfirethis nuget 之类的东西,并在相应的应用程序池中将 IdletimeOut 设置为 0

    【讨论】:

    • 感谢您的回复。我正在与 Microsoft 支持合作,看起来我们可以通过 3 种方式托管 wcf 服务。 1.初始化模块(IIS 8或以上)。 2.使用Task Scheduler(具体的exe项目)。 3. Power Shell 我们有两种类型的客户端都在使用 IIS7 和 8。不确定 IIS7 的推荐方式是什么。截至目前,我没有使用任何线程机制。另外,我从来没有在hangfire上工作过。我会浏览你的文章并会看到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2017-09-19
    • 2014-08-25
    相关资源
    最近更新 更多