将WCF配置为IIS7上托管的命名管道

时间:2015-07-22 10:30:55

标签: c# web-services wcf iis-7 named-pipes

我在IIS7上托管了两个不同的WCF服务。一种是配置为在namedpipe上运行的数据库服务。托管在同一台机器上的其他服务是通过命名管道访问第一个服务,并配置为在webhttp上运行。

然而,当我从另一个服务调用数据库服务时,我收到以下错误

"没有端点正在" net.pipe:// localhost / iSPYDBService"那可以接受这个消息。这通常是由错误的地址或SOAP操作引起的。有关详细信息,请参阅InnerException(如果存在)。"

数据库服务配置文件代码段

<system.serviceModel>
<services>
  <service name="DBService.Service">
    <endpoint address="net.pipe://localhost/iSPYDBService" 
              binding="netNamedPipeBinding" 
              contract="DBService.Contracts.IDBService"  
              bindingConfiguration="Binding1" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<protocolMapping>
  <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>

<bindings>
  <netNamedPipeBinding>
    <binding name="Binding1"                 
             closeTimeout="00:01:00"
             openTimeout="00:01:00"
             receiveTimeout="00:10:00"
             sendTimeout="00:01:00"
             transactionFlow="false"
             transferMode="Buffered"
             maxBufferPoolSize="524288"
             maxBufferSize="65536"
             maxConnections="10"
             maxReceivedMessageSize="65536">
      <security mode="Transport">
        <transport protectionLevel="EncryptAndSign" />
      </security>
    </binding>
  </netNamedPipeBinding>
</bindings>    
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

其他服务通过命名管道调用数据库服务会抛出错误,如上所述。

       ChannelFactory<DBService.Contracts.IDBService> pipeFactory =
                new ChannelFactory<DBService.Contracts.IDBService>(
            new NetNamedPipeBinding(),
            new EndpointAddress("net.pipe://localhost/iSPYDBService"));

        pipeProxy = pipeFactory.CreateChannel();

        var categories = pipeProxy.GetCategories();

这两项服务都托管在IIS上。我已经在数据库服务中为net.pipe提供了绑定,并且还添加了&#34; http,net.pipe&#34; in&#34;启用协议&#34;。

2 个答案:

答案 0 :(得分:1)

  1. 您无法使用IIS Express。

  2. 在IIS中(完整,不快递)...转到您的网站。

  3. 跟着面包屑:

    WCF主机网站&gt;管理应用程序&gt;高级设置&gt;启用协议

    你可能有&#34; http&#34;或&#34; http,net.tcp&#34;已经设定。

    添加&#34; net.pipe&#34; (前面有逗号)

    如下所示。注意,不要添加任何空格。

    http,net.tcp,net.pipe
    

    在这种情况下,魔术是正确的值(&#34; net.pipe&#34;)。

    您可以在此处详细了解

    Could not find a base address that matches scheme net.tcp

答案 1 :(得分:0)

以下内容应该有所帮助:

  1. 清除服务配置中的地址,例如address=""
  2. 在IIS中编辑站点的绑定,并添加或更新net.pipe类型的站点绑定,并提供&#34;绑定信息&#34;一个正确的名字
  3. 将您的客户端配置更新为address="net.pipe://PROPER_NAME/YOUR_SERVICE.svc"
  4. 为客户端和服务端的绑定设置安全模式为“无”。
  5. 确保为WCF 4.5的命名管道激活或WCF 3.5的非HTTP激活启用Windows功能