多个用户访问wcf,停止服务

时间:2011-02-24 05:16:06

标签: wcf iis rdlc application-pool network-service

我们目前有这样的设置:

1)一个网站,它向用户提供功能,其中一个模块连接到单独的Web服务(WCF)作为参考。

2)仅在网络中可见的内部Web服务,该服务为公共网站提供单独的功能。它呈现并返回一些数据和rdlc报告为字节数组。

当我尝试在网络系统下运行Web服务的应用程序池时,网站无法访问它。但是,当我将Web服务设置为Local System时,它可以工作。

唯一的问题是,每当有更多用户尝试从网站访问此Web服务时,不知何故,Web服务会停止并且需要池刷新才能使其再次运行。我已经检查了IIS的Web服务设置,并且连接设置为无限制。

帮助!

1 个答案:

答案 0 :(得分:0)

正如我在评论中所说,对于任何认真的工作,我通常建议不要将IIS用作应用程序主机。它有几个缺点(它决定了服务地址,它必须处理应用程序池并回收那些等。)

相反,我通常以自托管方式进行生产服务,例如在Windows NT服务中。这给了我更大的灵活性:我可以完全控制所有方面,包括地址,我可以随意启动/停止服务,而且我不会受到回收的应用程序池的支配。

基本上,您需要做的是从WCF运行时创建ServiceHost的实例,并将其服务类提供给主机,以及可选的一个(或多个)基地址,其中您的服务正在公开端点

ServiceHost svcHost = new ServiceHost(typeof(MyWCFService));

// optionally set additional properties here, if needed

svcHost.Open();  // now, the host is open and accepting 

如果您想停止收听请求,只需致电svcHost.Close(),您的服务主机就会消失。

当您将其打包到NT服务时,通常使用.Open()方法进行服务主机的设置和OnStart,并处理{{1}中的svcHost.Close() NT服务的方法。

这个包含OnStop的应用程序不一定是NT服务 - 特别是对于测试,将ServiceHost放入控制台应用程序,启动它,从而将您的WCF服务带到生活,测试/调试/增强,然后再次关闭控制台应用程序。在我看来,比使用IIS,虚拟目录和类似东西更容易。

请参阅:

相关问题