我正在使用一本名为“Window communication foundation 4:step by step”的书来学习WCF。在第二章中,有一个关于为WCF开发Windows服务的教程。客户端与命名管道端点通信。
//WCF inside Windows service.
protected override void OnStart(string[] args)
{
productsServiceHost = new ServiceHost(typeof(ProductsServiceImpl));
NetNamedPipeBinding binding = new NetNamedPipeBinding();
productsServiceHost.AddServiceEndpoint(typeof(IProductsService),
binding, "net.pipe://localhost/ProductsServicePipe");
productsServiceHost.Open();
}
客户端在App.config中定义了端点
<endpoint address="net.pipe://localhost/ProductsServicePipe"
binding="netNamedPipeBinding" bindingConfiguration=""
contract="ProductsService.IProductsService"
name="NetNamedPipeBinding_IProductsService" />
我需要为“服务引用”创建一个代理对象,这不是我之前提到的Windows服务。
// Create a proxy object and connect to the service
// There service reference for "ProductsServiceClient" is
// "http://localhost:51397/ProductsService/Service.svc"
ProductsServiceClient proxy = new ProductsServiceClient("NetNamedPipeBinding_IProductsService");
如果没有“ProductsServiceClient”,我无法启动代理。当我连接到窗口服务时,为什么需要该服务引用。我无法清楚地理解这个概念。
答案 0 :(得分:0)
在这种情况下,术语服务正在以两种方式使用。您有Windows服务,它是WCF服务的主机。您必须创建服务引用的原因是,您的项目可以生成创建代理以与WCF服务通信所需的所有代码。作为添加服务引用的替代方法,您还可以使用Channel Factory。要理解的关键是,当您创建WCF服务时,通常通过WCF管道(通过代理或通道工厂)访问该服务,即使您是从定义它的项目执行此操作也是如此。
如果您不清楚如何为自托管WCF服务生成代理,则应该研究svcutil.exe如何用于为编译服务生成代理。