需要从书中理解这个概念

时间:2013-05-22 17:57:59

标签: wcf

我正在使用一本名为“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”,我无法启动代理。当我连接到窗口服务时,为什么需要该服务引用。我无法清楚地理解这个概念。

1 个答案:

答案 0 :(得分:0)

在这种情况下,术语服务正在以两种方式使用。您有Windows服务,它是WCF服务的主机。您必须创建服务引用的原因是,您的项目可以生成创建代理以与WCF服务通信所需的所有代码。作为添加服务引用的替代方法,您还可以使用Channel Factory。要理解的关键是,当您创建WCF服务时,通常通过WCF管道(通过代理或通道工厂)访问该服务,即使您是从定义它的项目执行此操作也是如此。

如果您不清楚如何为自托管WCF服务生成代理,则应该研究svcutil.exe如何用于为编译服务生成代理。