0

我们目前有这个设置:

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

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

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

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

帮助!

4

1 回答 1

0

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

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

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

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()在NT 服务的 方法中处理。OnStartsvcHost.Close()OnStop

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

看:

于 2011-02-24T06:03:54.800 回答