在IIS下保持WCF服务活动

时间:2013-03-05 22:14:48

标签: c# wcf iis-7.5

我已经彻底搜索了互联网(大多数链接将我发送到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,例如返回一些整数。

那会有用吗?

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

5 个答案:

答案 0 :(得分:9)

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

enter image description here

参见相关帖子here

答案 1 :(得分:5)

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

Auto Start

答案 2 :(得分:1)

尽量避免使用while循环。也许http://quartznet.sourceforge.net/是你正在寻找的东西。在WCF上,每10分钟启动一次创建任务,这将对WCF本身进行校验。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

从一开始,你所做的事情基本上是错误的。

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

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

这不是IIS所做的,IIS处理请求并且其AppDomain受到所有时间的限制(使所有线程崩溃)。

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

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

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

因此,如果“保持活力”,你的意思是:不断请求某种服务,然后按照安德烈斯的建议进一步提高(创建一个schedoredled作业)。

如果使用“keep alive”意味着:要确保该类的同一个实例处理请求,那么您需要查看WCF的生命周期。

如果“保持活着”,你的意思是:让你创建的代码“有状态”并保持f.eks静态变量等等,你不会接受IIS基本上是无状态的pr。请求具有内部生命周期管理的经纪人。