由于我目前正在学习使用WCF服务,因此我经常遇到互联网上的教程,这些教程在使用WCF服务时使用ServiceHost
。
这究竟是什么ServiceHost
?
在我当前的项目中,我正在使用WCF服务并从我的应用程序中引用它,每当我想从我的应用程序中使用它时,我只是实例化它的ServiceClient
:
new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), customBinding, endpointAddress);
然后从该实例访问我的网络方法(OperationContract
s)(显然在使用该方法之前打开它并在之后使用Open
和Close
关闭它)
我的WCF服务是我的IIS中的主机,我只是从我的应用中访问.svc
来实例化ServiceClient
。
那么ServiceHost
使用的原因和位置是什么?
答案 0 :(得分:31)
ServiceHost基本上为您提供在非IIS或WAS设置中托管WCF服务所需的一切。 ServiceHost的常见位置是控制台应用程序或Windows服务。请参阅MSDN中的how to setup a ServiceHost in a console app示例代码。
答案 1 :(得分:25)
您的服务实现只是一个.NET类 - 您需要有一个运行时环境,因此它可以以某种方式执行。这就是ServiceHost的用途 - 它将加载您的服务类,设置端点和通道监听器以及所有这些东西,从而为您的服务类提供一个生态和操作的“生态系统”。
您可以在控制台应用程序,Windows服务甚至Winforms应用程序中自己实例化ServiceHost类,从而使您的WCF服务类可供外部使用 - 或者您可以将该工作委派给IIS或WAS。甚至IIS或WAS也将使用ServiceHost托管您的WCF服务 - 他们只是在幕后自动执行,并且“按需” - 只要您的WCF服务请求进入。
马克