使用命名管道绑定为WCF服务生成代理类

时间:2014-10-25 02:17:30

标签: c# wcf namespaces named-pipes

我正在尝试生成一个使用命名管道绑定的代理类,并通过Windows服务在本地托管。我对如何执行此操作感到困惑,因为我没有指向svcutil命令的URL。以下是我用于通过Windows服务打开主机的方法。

host = new ServiceHost(typeof(MyCoolService.MyCoolService), new Uri[] { new Uri("net.pipe://localhost") });
            _host.AddServiceEndpoint(typeof(IMyCoolServiceObj),
                    new NetNamedPipeBinding(),
                    "MyCoolServicePipe");

目前我正在使用ChannelFactory从我的客户端进行连接,但遇到的问题是我发送给服务方法的参数是作为服务端的空字符串接收的。所以我想我应该尝试使用代理类来确保接口完全正确。

3 个答案:

答案 0 :(得分:1)

您可以在里面定义绑定,服务和端点,然后您可以使用ServiceReference添加服务并生成代理。

使用Channel Factory仍然可以。它将根据服务名称(类型)提取信息。

答案 1 :(得分:1)

示例:

  using (System.ServiceModel.ServiceHost host = new System.ServiceModel.ServiceHost(typeof(SERVICETYPE), new Uri[] { }))



 <services>
      <service name="SERVICETYPE" behaviorConfiguration="serviceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000"/>
          </baseAddresses>
  </services>

 <endpoint address="/END" binding="basicHttpBinding" bindingConfiguration="basicHttpBinding" contract="YOUR INTERFACE"/>

执行此操作后,您将创建使用&#34;添加服务参考&#34;生成你的代理。

答案 2 :(得分:0)

“添加服务引用”仅适用于http协议

您需要在服务器配置端配置MEX(Meta Exchange)端点。完成后,您需要使用SVCUtil.exe生成客户端代理。

您可以查看此链接以解决您的问题:MSDN NamedPipe Activation

该链接还说明了如何使用WAS(Windows激活服务)在IIS中提供服务,这是一种更清晰的托管服务方式。如果您不需要WAS,那么请忘记它们是否配置IIS以启用命名管道作为协议。如果仍然卡住,请尝试添加基地址并在svcutil命令中使用此地址,如下所示:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

SvcUtil命令: svcutil / d:“目录位置生成代码”/ config:“配置文件的名称:app.config或web.config”/ o:ClientProxyFileName.cs net.pipe:// localhost:9000 / AddressName / mex

如果您通过代码添加所有配置,您也可以查看以下示例: MSDN NetNamedPipeBinding Class