C# WCF NetTcp配置问题
我们在为本地托管在IIS中的WCF Web服务配置netTcp时遇到问题。这是在具有DotNet 4.0(VS2012)的Windows 7和IIS 7上,防火墙已禁用 我们已完成以下步骤来配置netTcp:C# WCF NetTcp配置问题,c#,wcf,C#,Wcf,我们在为本地托管在IIS中的WCF Web服务配置netTcp时遇到问题。这是在具有DotNet 4.0(VS2012)的Windows 7和IIS 7上,防火墙已禁用 我们已完成以下步骤来配置netTcp: 在IIS中,为默认网站设置net.tcp 808:*的网站绑定 在我们的web服务的IIS中,启用的协议是“http,net.tcp”(无空格) 已验证的Net.Tcp侦听器适配器和Net.Tcp端口共享服务正在运行(也回收了它们) 现在,当我们运行netstat-ona时,我们没有看到1
<system.web>
<customErrors mode="Off"></customErrors>
<compilation debug="true" targetFramework="4.0"></compilation>
<identity impersonate="false" />
</system.web>
<system.serviceModel>
<diagnostics>
<messageLogging logMalformedMessages="false" logMessagesAtServiceLevel="false"
logMessagesAtTransportLevel="false" />
</diagnostics>
<bindings>
<netTcpBinding>
<binding name="XxxxxxxCommonServiceBinding" />
</netTcpBinding>
</bindings>
<services>
<service behaviorConfiguration="XxxxxxxCommonService_Behavior" name="CS.WebService.Xxxxxxx.Common.XxxxxxxCommonService">
<endpoint address="net.tcp://localhost:808/CS.WebService.Xxxxxxx.Common.XxxxxxxCommonService/XxxxxxxCommonService.svc" binding="netTcpBinding"
bindingConfiguration="XxxxxxxCommonServiceBinding" name="XxxxxxxCommonNetTcpBinding"
contract="CS.ServiceContracts.Xxxxxxx.Common.IXxxxxxxCommonService" />
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="XxxxxxxCommonService_Behavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false">
</serviceHostingEnvironment>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
下面是App.config:
<system.serviceModel>
<client>
<endpoint name="CS.WebService.Xxxxxxx.Common.XxxxxxxCommonService"
address="net.tcp://localhost/CS.WebService.Xxxxxxx.Common.XxxxxxxCommonService/XxxxxxxCommonService.svc"
binding="netTcpBinding"
bindingConfiguration="XxxxxxxCommonNetTcpBinding"
contract="CS.ServiceContracts.Xxxxxxx.Common.IXxxxxxxCommonService"/>
</client>
</system.serviceModel>
以下是我尝试调用服务的客户端中的代码:
var endPoint = new EndpointAddress(
"net.tcp://127.0.0.1:809/CS.WebService.Xxxxxx.Common.XxxxxxCommonService/XxxxxxCommonService.svc");
var binding = new NetTcpBinding { TransferMode = TransferMode.Streamed, SendTimeout = TimeSpan.MaxValue };
var channel = new ChannelFactory<IXxxxxxCommonService>(binding, endPoint);
var proxy = channel.CreateChannel()
var request = new GetDataRequest();
var response = proxy.GetData(request);
var endPoint=新端点地址(
“净。tcp://127.0.0.1:809/CS.WebService.Xxxxxx.Common.XxxxxxCommonService/XxxxxxCommonService.svc");
var binding=new nettcppbinding{TransferMode=TransferMode.Streamed,SendTimeout=TimeSpan.MaxValue};
var通道=新的通道工厂(绑定,端点);
var proxy=channel.CreateChannel()
var request=new GetDataRequest();
var response=proxy.GetData(请求);
在这一点上,我们得到以下错误:
无法连接到网络。tcp://127.0.0.1:809/CS.WebService.Xxxxxx.Common.XxxxxxCommonService/XxxxxxCommonService.svc. 连接尝试持续了00:00:00的时间跨度。TCP错误代码10061:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:809
如果我将代码和WebConfig中的端口更改为808,则会出现以下错误:
在网络上没有端点侦听。tcp://127.0.0.1/CS.WebService.Xxxxxx.Common.XxxxxxCommonService/XxxxxxCommonService.svc 这可以接受这个信息。这通常是由不正确的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。(注意,没有内部异常)
所以在我看来,因为netstat-ona没有显示127.0.0.1:808,所以我没有正确地配置一些东西。但是Net.Tcp服务仍然在运行,并且已经被回收,我相信IIS的设置也是正确的,所以不确定该转向哪里 进入控制面板>程序和功能>打开或关闭Windows功能。 在随后的对话框中,转到条目<代码>微软.NETFramework 3.5.1,并启用<>代码> Windows通信基础非HTTP激活< /代码>。 (虽然上面说的是Win7内置框架的
3.5.1
,但它也适用于4.0
)
您应该在netstat输出中看到
0.0.0.0:808
。更改了会话模式。在客户端和服务器上都允许,并且一切都开始工作。我的电脑也有内存问题,所以一旦我清除了内存并获得正确的会话模式,一切都很好。打开跟踪功能为我指明了正确的方向。看起来您已经配置了WCF跟踪功能。我要确保客户机和服务都已启用跟踪,并从客户机跟踪文件开始,查看引发异常的位置。另外,尝试运行并将工作配置与您的配置进行比较。我的客户端代码中有endpointAddress的类型。我修正了这个问题,现在我要做一个不同的错误。我执行了soo 0.0.0.0:808,所以看起来没问题。我现在的错误是契约不允许会话,但绑定“NetTcpBinding”不支持数据报。所以我更改了channel.Endpoint.Contract.SessionMode=SessionMode.Allowed,但仍然得到相同的错误。@77vetter:如果要更改SessionMode,应该在客户端和服务器上都更改它。然而,我不确定这能解决你的问题。若你们不能修复它,你们应该发布新的问题来描述你们的新问题。一旦我改变了客户端和服务器上的会话模式,允许一切开始工作。