我正在尝试在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方案吗?
答案 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"
属性感到满意。