【问题标题】:Keep a WCF Service alive under IIS在 IIS 下保持 WCF 服务处于活动状态
【发布时间】:2016-12-09 01:39:17
【问题描述】:

我已经彻底搜索了互联网(大多数链接将我发送到 stackoverflow ;))以尝试提出一个解决方案,如何在 IIS (7.5) 下保持 WCF 服务处于活动状态。

这里的许多回复都建议编写一个应用程序,该应用程序将定期向 WCF 服务发送虚拟请求以使其保持活动状态。

我的问题是: 如果我在 WCF 中创建一个线程,该线程将在首次调用服务时启动(在静态构造函数中),该线程将定期消耗 WCF 本身?

我的意思是例如在 c# 中:

while (true)
{
     WebClient client = new WebClient();
     string returnString = client.DownloadString("http://...");
     Thread.Sleep(1000 * 5);
}

假设“http://...”是提供的 WebMethod 的 URI,例如返回某个整数。

这行得通吗?

基本上,我需要某种在执行某些操作并更新 SQL Server 数据库中的内容的服务器上运行的 Web 服务(不是特别是 WCF,但不是 Windows 服务)。因此,如果所描述的方法不起作用,那么实现这一目标的最佳方法是什么?

【问题讨论】:

  • 适合您的方案?绝对不是 WCF。为什么不使用 Win 服务?
  • 因为有时我还需要通过 HTTP 向它发送一些数据
  • 好的。怎么会互相排斥?您可以拥有 WCF AND Win 服务,两者都使用相同的业务逻辑库等。如果没有,为什么不呢?
  • 为什么需要让服务保持活力? IIS 会在需要时自动启动它。

标签: c# wcf iis-7.5


【解决方案1】:

转到您的 IIS -> 应用程序池(或创建新的)-> 高级设置并设置常规时间间隔=0

查看相关话题here

【讨论】:

    【解决方案2】:

    AppFabric 允许您创建可以自动启动并长期存在的 wcf 服务 - 作为托管选项可能值得一试(它只是 IIS 的插件)

    Auto Start

    【讨论】:

    • 我忘了提到我正在将它部署在一些免费的 .NET 托管服务 (www.somee.com) 上,所以我不能真正弄乱 IIS。
    • 啊。如果您真的想尝试使用线程调用服务的想法,那么值得查看 WF WCF 服务,它支持睡眠、护航等 - 尽管 Windows 服务是更好的选择
    • 如果我在 Windows 服务下托管 WCF,WCF 将始终保持活动状态?
    • Windows 服务将处于活动状态,因此可以做任何您需要的事情 - 如果您托管 wcf 服务,它将在服务运行时为请求打开。
    【解决方案3】:

    你所做的事情从一开始就是错误的。

    问题是这样的: IIS 基本上是 http 请求的无状态请求代理(基本 IIS)和服务请求的请求代理(IIS w. AppFabric)。

    您要问的是如何将固有的无状态 IIS 转变为有状态的服务器,并运行永恒的线程。

    这不是 IIS 所做的,IIS 处理请求,并且它的 AppDomain 随时都会被拆除(破坏所有线程)。

    这使得最赞成的答案很危险,因为它教您如何影响回收过程,而不控制 IIS 本身将间歇性执行的拆卸(关闭应用程序域和线程)。

    请求者对于 IIS 本身来说是“外来的”。

    不过,服务的内部生命周期完全由 IIS(及其应用程序的配置)本身管理。

    因此,如果“保持活力”是指:不断请求某些服务,然后按照 Andreas 的建议进一步执行(创建计划的工作)。

    如果“保持活动状态”是指:确保类的同一个实例处理请求,那么您需要查看 WCF 生命周期。

    如果使用“保持活动”是指:使您创建的代码“有状态”并保持 f.eks 静态变量活动等等,那么您不接受 IIS 基本上是无状态的 pr。具有内部生命周期管理的请求代理。

    【讨论】:

      【解决方案4】:

      我建议您创建一个调用 Web 服务的小程序(控制台应用程序)。该程序应将 Web 服务的 url 作为参数。然后您创建一个运行该程序的 Windows 计划任务。与您查询的嵌入式方法相比,这种方式具有很大的灵活性,因为该程序只是 Web 服务的另一个客户端。

      【讨论】:

        【解决方案5】:

        尽量避免使用while循环。也许http://quartznet.sourceforge.net/ 是您正在寻找的东西。在 WCF 开始时,每 10 分钟创建一个任务,这将调用 WCF 本身。

        【讨论】:

          猜你喜欢
          • 2017-01-14
          • 1970-01-01
          • 1970-01-01
          • 2011-11-22
          • 1970-01-01
          • 2012-01-03
          • 2014-11-16
          • 2012-05-24
          • 2021-09-13
          相关资源
          最近更新 更多