我已经尝试了一个多星期而没有任何成功,使用netTcpBinding托管wcf服务。
使用http,一切正常。但是出现了tcp问题。
我已经执行了我应该执行的所有步骤,以便在WAS中托管我的服务:
.Net 3.0功能已启用,包括http和非http激活
。在IIS管理器/管理网站/高级设置中,启用了http和net.tcp协议。 - 我还将net tcp添加到站点绑定
当我运行webservice时,我有这样的例外:无法找到与绑定NetTcpBinding的端点匹配scheme net.tcp的基址。注册的基地址方案是[http]。
这是我的Web.Config的样子:
<services>
<service name="Services.Library.OrderService" BehaviorConfiguration="OrderServiceBehavior">
<!-- Service Endpoints -->
<endpoint address="WSOrder.svc"
binding="netTcpBinding"
bindingConfiguration="netTcpStreaming"
name="NetTcpBindingEndpoint"
contract="Services.Interface.IOrderService" >
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:808/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="OrderServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="false" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false" />
<dataContractSerializer maxItemsInObjectGraph="6553600" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="netTcpStreaming"
openTimeout="10:00:00"
closeTimeout="10:00:00"
receiveTimeout="10:00:00"
sendTimeout="10:00:00"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" >
<!-- this is for demo only. Https/Transport security is recommended -->
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
你能告诉我我的代码有什么问题吗?
提前致谢
答案 0 :(得分:1)
我最近自己也遇到过类似的问题,但最终还是成功了。
您说“在IIS管理器/管理网站/高级设置中,http和net.tcp协议都已启用.-我还将net tcp添加到站点绑定”。 如果存在,则还需要在子“虚拟根”级别手动设置此设置。这是在IIS中的虚拟根目录下运行吗?如果是,请在那里检查此设置。
您是否还在网站级别设置了绑定“编辑绑定”?您需要在此处添加net.tcp绑定。在你的情况下:
Type: net.tcp
Binding Information: 808:*
如果两者都失败,请回复。我会留意:)
[编辑以回应您的评论]
好的 - 我仔细看了一下你的配置,看起来不对我。这是服务器端配置? [即不适用于主叫客户]
我根据你的情况重新创建了一个配置供你试用。 [我已经删除了mex的东西 - 只是一个准确的tcp绑定]
您是否一直在使用WCF服务配置编辑器生成此配置,或者您是否已经手动执行此操作?如果是手动,请不要 - 使用配置编辑器。它拯救了生命!
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="netTcpStreaming" closeTimeout="00:10:00" openTimeout="00:10:00"
sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
<services>
<service name="Services.Library.OrderService">
<endpoint address="net.tcp://localhost:808/" binding="netTcpBinding"
bindingConfiguration="netTcpStreaming" contract="Services.Interface.IOrderService" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:808/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
答案 1 :(得分:1)
如果你想要mex,你必须定义一个http端点,无论你是否使用它。
放弃mex,你的服务应该可以正常工作。
这是我的一个集成测试中的一个有效的net.tcp绑定....将它与你拥有的相比......
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WcfServiceLibrary1.Service">
<endpoint address="service" binding="netTcpBinding" contract="WcfServiceShared.IService" name="TcpBinding" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8000/ServiceHost/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
答案 2 :(得分:0)
这完全是猜测,但您可能想尝试使用此代码:
<baseAddresses>
<add baseAddress="net.tcp://localhost:808/" />
</baseAddresses>
可能会将net.tcp
更改为http