6

我已经彻底搜索了互联网(大多数链接将我发送到 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 服务)。因此,如果所描述的方法不起作用,那么实现这一目标的最佳方法可能是什么?

4

5 回答 5

9

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

在此处输入图像描述

在此处查看相关线程。

于 2013-03-06T00:59:11.713 回答
5

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

自动开启

于 2013-03-05T22:27:58.383 回答
2

你所做的从一开始就基本上是错误的。

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

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

这不是 IIS 所做的,IIS 处理请求,并且它的 AppDomain 始终受到拆除(破坏所有线程)的影响。

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

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

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

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

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

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

于 2016-12-08T17:39:17.070 回答
1

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

于 2013-03-05T22:23:37.590 回答
1

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

于 2013-03-05T22:28:52.497 回答