C# WCF 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

我们在为本地托管在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时,我们没有看到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);
    
    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,应该在客户端和服务器上都更改它。然而,我不确定这能解决你的问题。若你们不能修复它,你们应该发布新的问题来描述你们的新问题。一旦我改变了客户端和服务器上的会话模式,允许一切开始工作。