2011-11-09 117 views
0

我想在Windows 7,64位的IIS 7.5站点内使用net.tcp绑定托管WCF服务。可悲的是,该服务无法访问。实际上,使用telnet连接到TCP端口甚至失败。IIS托管的WCF服务与net.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管理器,我建立了一个网站有下的网络服务身份运行的应用程序池,与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的端点的方案net.tcp相匹配的基地址。注册的基址方案是[HTTP]

我很清楚绑定HTTP和这里的net.tcp:

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

所以把那句“已注册的基址方案”有我担心;有什么额外的我必须做的让我的网站支持net.tcp方案?

+0

你想从客户那里得到什么URL? –

+0

我已经尝试过'net.tcp://127.0.0.1:9000/service'和其他变体,但我想如果我甚至不能建立到端口9000的连接,我的问题不在于URL。 – Jacob

+0

尝试net.tcp://127.0.0.1:9000 /服务/服务 –

回答

1

我终于得到了IIS允许端口9000连接之前我没有看到这个选项,但我不知道这是因为我没有我的现场检查,或者如果我不得不做一些事情来得到它显示向上。

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

0

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

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

+0

我已经为TCP端口9000的Windows 7防火墙创建了入站规则,并且连接仍然失败。还有什么我需要做的绕过防火墙? – Jacob

+0

@Jacob - 您可以暂时禁用防火墙,以100%确定它不是Windows防火墙。 – 5StringRyan

+0

不幸的是,在我的环境中禁用防火墙。我认为我添加到我的问题中的错误消息可能有助于找出问题。 – Jacob

0

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

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

0

由于您使用的是IIS,因此我会放弃baseAddress节点,因为IIS将从您配置的绑定/虚拟路径中推断出基地址。

另外请记住,WCF不会对您的元数据行为中的httpGetEnabled="true"属性感到高兴,而没有任何可用的http端点。

相关问题