我们目前有这样的设置:
1)一个网站,它向用户提供功能,其中一个模块连接到单独的Web服务(WCF)作为参考。
2)仅在网络中可见的内部Web服务,该服务为公共网站提供单独的功能。它呈现并返回一些数据和rdlc报告为字节数组。
当我尝试在网络系统下运行Web服务的应用程序池时,网站无法访问它。但是,当我将Web服务设置为Local System时,它可以工作。
唯一的问题是,每当有更多用户尝试从网站访问此Web服务时,不知何故,Web服务会停止并且需要池刷新才能使其再次运行。我已经检查了IIS的Web服务设置,并且连接设置为无限制。
帮助!
答案 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,虚拟目录和类似东西更容易。
请参阅: