WCF NetTcp配置问题

时间:2013-07-24 13:44:54

标签: c# wcf

我们在为本地托管在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端口共享服务正在运行(也可以回收它们)
  4. 现在当我们运行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设置正确,所以不知道在哪里转。

2 个答案:

答案 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正确一切都很好。转向跟踪是我指向正确方向的原因。