有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
我看到两件事:
1)在服务器的web.config
中,您的netttcp端点没有地址。如果您想让netttcp端点监听net.Tcp
的默认基址,我仍然会在端点中添加address=""
:
<endpoint
address=""
binding="netTcpBinding"
bindingConfiguration="tcpBinding"
contract="FLOW5ServiceDLL.IFLOW5WCFService"/>
2)在你的客户端,你不定义任何netTcpBinding
配置,而在服务器端,你做。我现在没有看到任何关键设置-但为了安全起见,我建议尝试在客户端的配置中使用相同的netTcpBinding
配置,并在客户端的tcpEndpoint
中使用该配置,看看是否有任何差异。
如果没有效果:为什么你不试着禁用/关闭服务器端的netttcp端口共享?我不认为在你的例子中有什么必要——只要你真的不需要它,试着不使用它。