我们在为我们在 IIS 中本地托管的 WCF WebService 配置 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 时,我们看不到 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 设置也正确,所以不知道该转向哪里。