我们在为本地托管在IIS中的WCF WebService配置netTcp时遇到问题。这是在带有DotNet 4.0(VS2012)的Windows 7和IIS 7上,防火墙被禁用。
我们已完成以下步骤来配置netTcp:
现在当我们运行netstat -ona时,我们没有看到127.0.0.1:808的任何列表 - 我们应该吗?
这是我的Web.config:
<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);
正是在这一点上我们得到以下错误:
无法连接到net.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,则会出现以下错误:
没有端点侦听net.tcp://127.0.0.1/CS.WebService.Xxxxxx.Common.XxxxxxCommonService/XxxxxxCommonService.svc,可以接受该消息。这通常是由错误的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。 (注意,没有内部异常)
所以在我看来,因为netstat -ona没有显示127.0.0.1:808我没有正确配置的东西。但Net.Tcp服务再次运行并已被回收,我相信IIS设置正确,所以不知道在哪里转。
答案 0 :(得分:1)
转到“控制面板”&gt;节目和特征&gt;打开或关闭Windows功能。
在随后的对话框中,转到条目Microsoft .NET Framework 3.5.1
并启用Windows Communication Foundation Non-HTTP Activation
。
(虽然它说3.5.1
- Win7在框架中构建 - 它也适用于4.0
。
您应该在netstat输出中看到0.0.0.0:808
。
答案 1 :(得分:1)
在客户端和服务器上更改了SessionMode.Allowed,一切都开始工作了。我的电脑上也有内存问题,所以一旦我清除了内存并得到sessionMode正确一切都很好。转向跟踪是我指向正确方向的原因。