IIS托管的WCF服务,net.tcp绑定无法访问

时间:2011-11-09 19:28:14

标签: wcf .net-4.0 iis-7.5 net.tcp

我正在尝试在Windows 7,64位的IIS 7.5站点内托管带有net.tcp绑定的WCF服务。可悲的是,该服务无法访问。实际上,使用telnet打开与TCP端口的连接甚至会失败。

以下是该网站的web.config的system.serviceModel部分:

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultServiceBehavior">
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2000000" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="DefaultServiceBehavior" 
               name="FooService">
        <endpoint binding="netTcpBinding" bindingConfiguration="service" 
                  name="service" contract="IFoo" />
        <endpoint binding="mexTcpBinding" 
                  bindingConfiguration="DuplexBinding" contract="IFoo" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://127.0.0.1:9000/service"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="service" portSharingEnabled="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" 
                        maxArrayLength="16384" maxBytesPerRead="4096" 
                        maxNameTableCharCount="16384" />
          <security mode="None"/>
        </binding>
        <binding name="DuplexBinding">
          <reliableSession enabled="true"/>
          <security mode="None"/>
        </binding>
      </netTcpBinding>
    </bindings>
</system.serviceModel>

在IIS管理器中,我建立了一个站点,其中的应用程序池以NETWORK SERVICE的身份运行,具有v4.0 .NET Framework和集成管道。该网站有一个绑定,类型为net.tcp,“绑定信息”设置为9000:*

在我的计算机服务下,我启动了之前停止的“Net.Tcp侦听器适配器”和“Net.Tcp端口共享服务”服务,并使它们都自动启动。我还确保安装了“Windows Communication Foundation非HTTP激活”。

我还需要做些什么来获取IIS / WCF / WAS /在端口9000上监听的内容,以便我的服务可以被激活和调用?

我的问题类似于Host WCF service with net.tcp binding through IIS Manager 7.5,但OP没有注册,他的问题没有得到解答。我正在打开这个问题,所以我可以发布自己的详细信息。

更新

我发现了一些额外的线索。我决定添加第二个绑定,以便在尝试找出net.tcp问题时使用HTTP绑定。现在,当我尝试访问HTTP端点时,我收到此错误

  

无法找到与绑定NetTcpBinding的端点匹配scheme net.tcp的基址。注册的基地址方案是[http]

我非常清楚在这里对HTTP和net.tcp进行绑定:

<baseAddresses>
    <add baseAddress="net.tcp://localhost:9000/"/>
    <add baseAddress="http://localhost:8050/"/>
</baseAddresses>

所以“注册基地址方案”这句话让我很担心;我还需要做些什么来让我的网站支持net.tcp方案吗?

4 个答案:

答案 0 :(得分:1)

我终于让IIS允许连接到端口9000.我之前没有看到这个选项,但我不知道是不是因为我的检查失败了,或者我是否必须做些什么才能让它显示出来

在IIS站点的高级设置下,有一个“启用的协议”设置。以前,它只设置为http。将其更改为http, net.tcp后,我可以连接到TCP端口。

答案 1 :(得分:0)

看起来你已经做了大部分事情。

剩下的最可能的问题是防火墙。标准的Windows防火墙阻塞端口9000。

答案 2 :(得分:0)

我会尝试SSamra的建议。我认为你的基地址和你正在尝试的URL可能是错误的。我看起来像这样:

的net.tcp://本地主机:PORT / ServiceNamespace /类名

答案 3 :(得分:0)

由于您使用的是IIS,我会完全删除 baseAddress 节点,因为IIS会从您配置的绑定/虚拟路径推断出基地址。

另请注意,在没有任何http端点可用的情况下,WCF不会对元数据行为中的httpGetEnabled="true"属性感到满意。