有2个端点的问题:wsHttpBinding和netTCPBinding

本文关键字:wsHttpBinding netTCPBinding 问题 2个 端点 | 更新日期: 2023-09-27 18:03:50

我正在学习WCF,并首先使用wsHttpBinding开发了一个服务,并将其托管在IIS7 (win7)上,并从Windows客户端应用程序中使用该服务。它工作正常(使用WCF服务DLL方法)

我尝试有两个端点并添加netTCpBinding。我遇到一个错误

{TransportManager无法使用netttcpportsharing服务:启动失败,因为它是禁用。

我已经启动了所需的服务,甚至重新启动了我的机器。在"services"中,这两个服务显示为自己启动了。根据许多博客和msdn的通知,我已经在IIS中启用了所需的tcpnetbinding设置。

我的客户端应用程序配置是这样的:

 <configuration>    
    <system.serviceModel>
        <bindings />
        <client>
           <endpoint name="httpEndpoint"
               address="http://MachineName:8000/FLOW5WCFService.svc"
               binding="wsHttpBinding"
               contract="FLOW5ServiceDLL.IFLOW5WCFService"/>
           <endpoint name="tcpEndpoint"
               address="net.tcp://MachineName:8082/FLOW5WCFService.svc"
               binding="netTcpBinding"
               contract="FLOW5ServiceDLL.IFLOW5WCFService"/>
        </client>
    </system.serviceModel>
</configuration>

Service web.config:

<configuration>
   <system.serviceModel>
      <bindings>
         <netTcpBinding>
              <binding name="tcpBinding" 
                  portSharingEnabled="true"
                  closeTimeout="00:10:00" openTimeout="00:10:00"
                  receiveTimeout="00:10:00" sendTimeout="00:10:00" transactionFlow="true"
                  hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288"
                  maxReceivedMessageSize="2147483647">
                  <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
                      maxArrayLength="2147483647" maxBytesPerRead="4096" 
                      maxNameTableCharCount="320000" />
              </binding>
         </netTcpBinding>
      </bindings>
      <services>
          <service behaviorConfiguration="FLOW5ServiceDLL.FLOW5WCFServiceBehaviour" 
                   name="FLOW5ServiceDLL.FLOW5WCFService">
             <endpoint 
                 address="" 
                 binding="wsHttpBinding" 
                 contract="FLOW5ServiceDLL.IFLOW5WCFService">
                 <identity>
                     <dns value="localhost" />
                 </identity>
             </endpoint>
             <endpoint
                 binding="netTcpBinding"
                 bindingConfiguration="tcpBinding"
                 contract="FLOW5ServiceDLL.IFLOW5WCFService"/>
            <endpoint 
                address="mex" 
                binding="mexHttpBinding" 
                contract="IMetadataExchange" />
            <host>
                <baseAddresses>
                     <add baseAddress="http://localhost:8000/" />
                     <add baseAddress="net.tcp://localhost:8082" />
                </baseAddresses>
            </host>
        </service>
   </services>
   <behaviors>
       <serviceBehaviors>
            <behavior name="FLOW5ServiceDLL.FLOW5WCFServiceBehaviour">
               <serviceMetadata httpGetEnabled="false" />
               <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
       </serviceBehaviors>
   </behaviors>
</system.serviceModel>
<system.web>
    <compilation debug="false" />
</system.web>
</configuration>

我正在创建一个通道,如下所示在我的客户端代码

ChannelFactory<IFLOW5WCFService> protocolFactory 
      = new ChannelFactory<IFLOW5WCFService>("tcpEndpoint");
l_oFLOW5Service = protocolFactory.CreateChannel();

有没有人可以让我知道,如果我的配置是错误的,或者他们的任何其他设置,我需要做的?如果需要更多的信息,请告诉我。

Thanks in advance

有2个端点的问题:wsHttpBinding和netTCPBinding

我看到两件事:

1)在服务器的web.config中,您的netttcp端点没有地址。如果您想让netttcp端点监听net.Tcp的默认基址,我仍然会在端点中添加address="":

<endpoint
    address=""
    binding="netTcpBinding"
    bindingConfiguration="tcpBinding"
    contract="FLOW5ServiceDLL.IFLOW5WCFService"/>

2)在你的客户端,你不定义任何netTcpBinding配置,而在服务器端,你做。我现在没有看到任何关键设置-但为了安全起见,我建议尝试在客户端的配置中使用相同的netTcpBinding配置,并在客户端的tcpEndpoint中使用该配置,看看是否有任何差异。

如果没有效果:为什么你不试着禁用/关闭服务器端的netttcp端口共享?我不认为在你的例子中有什么必要——只要你真的不需要它,试着不使用它。