正如我在评论中所说,对于任何严肃的工作,我通常建议不要将 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 服务的 方法中处理。OnStart
svcHost.Close()
OnStop
这个包含 NT 服务的应用程序ServiceHost
不一定是 NT 服务 - 特别是对于测试,将您的 ServiceHost 放入控制台应用程序总是很容易,启动它,从而使您的 WCF 服务栩栩如生,测试/调试/增强,然后再次关闭控制台应用程序。在我看来,这比使用 IIS、虚拟目录和类似的东西要容易得多。
看: