IIS 7.0使用netTcpBinding

时间:2010-02-17 16:28:14

标签: .net wcf iis-7 tcp

我已经尝试了一个多星期而没有任何成功,使用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>

你能告诉我我的代码有什么问题吗?

提前致谢

3 个答案:

答案 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