0

我正在使用一本名为“窗口通信基础4:一步一步”的书学习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”,我无法启动代理。当我连接到窗口服务时,为什么需要该服务参考。我无法清楚地理解这个概念。

4

1 回答 1

0

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

如果您不清楚如何为自托管 WCF 服务生成代理,您应该了解如何使用svcutil.exe为已编译服务生成代理。

于 2013-05-22T19:07:47.217 回答