2

我们在为我们在 IIS 中本地托管的 WCF WebService 配置 netTcp 时遇到问题。这是在带有 DotNet 4.0 (VS2012) 的 Windows 7 和 IIS 7 上,防火墙被禁用。

我们已经完成了以下步骤来配置 netTcp:

  1. 在 IIS 中,为 net.tcp 808 设置站点绑定:* 为默认网站
  2. 在我们的 Web 服务的 IIS 中,启用的协议是“http,net.tcp”(没有空格)
  3. 已验证 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 设置也正确,所以不知道该转向哪里。

4

2 回答 2

1

转到控制面板 > 程序和功能 > 打开或关闭 Windows 功能。在随后的对话框中,转到 entryMicrosoft .NET Framework 3.5.1并启用Windows Communication Foundation Non-HTTP Activation。(虽然它说3.5.1- Win7 内置的框架 - 它也适用4.0)。

您应该0.0.0.0:808在 netstat 输出中看到。

于 2013-07-24T15:38:24.320 回答
1

更改了客户端和服务器上的 SessionMode.Allowed,一切都开始工作了。我的电脑上也有内存问题,所以一旦我清除了内存并正确设置了 sessionMode,一切都很好。开启追踪功能为我指明了正确的方向。

于 2013-07-24T19:12:08.137 回答