代码之家  ›  专栏  ›  技术社区  ›  Matt

无法让wcf使用nettcpbinding

  •  2
  • Matt  · 技术社区  · 15 年前

    下面是我的app.config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="Indexer">
            <endpoint address="net.tcp://localhost:8000/Indexer/" binding="netTcpBinding"
              bindingConfiguration="TransactionalTCP" contract="Me.IIndexer" />
          </service>
          <service name = "Indexer" behaviorConfiguration = "MEXGET">
            <host>
              <baseAddresses>
                <add baseAddress = "http://localhost:8000/"/>
              </baseAddresses>
            </host>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name = "MEXGET">
              <serviceMetadata httpGetEnabled = "true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <bindings>
          <netTcpBinding>
            <binding name="TransactionalTCP"
               transactionFlow="true"
             />
          </netTcpBinding>
        </bindings>
      </system.serviceModel>
    </configuration>
    

    由于某种原因,我无法访问运行此命令的计算机上的WCF服务。 有人能指出错误吗?我已经启动并运行了nettcpbinding服务。

    当我在HTTP中运行相同的文件时,它可以通过以下.config文件正常工作

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="IndexerServiceBehavior">
              <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/Indexer/"/>
              <serviceDebug includeExceptionDetailInFaults="True" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service name="Indexer" behaviorConfiguration="IndexerServiceBehavior">
            <endpoint address="http://localhost:8080/Indexer/" binding="basicHttpBinding"
                bindingConfiguration="" name="HTTP" contract="IIndexer" />
            <endpoint address="http://localhost:8080/Indexer/MEX/" binding="mexHttpBinding"
                bindingConfiguration="" name="MEX" contract="IMetadataExchange" />
          </service>
        </services>
      </system.serviceModel>
    </configuration>
    

    我真的不知道我做错了什么……

    3 回复  |  直到 15 年前
        1
  •  3
  •   spender    15 年前

    当然,你已经打开防火墙让它监听了吗?

    如果有用的话,下面是我不久前成功使用的绑定:

    <services>
    
      <service name="MyService.MySearch" behaviorConfiguration="ServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://mypc:8003/MyService"/>
          </baseAddresses>
        </host>
        <endpoint bindingConfiguration="Binding1"
                  binding="netTcpBinding"
                  contract="MyService.IMySearch"
                  address="net.tcp://mypc:8004/MyService"  />
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="Binding1"
                 hostNameComparisonMode="StrongWildcard"
                 sendTimeout="00:10:00"
                 maxReceivedMessageSize="65536"
                 transferMode="Buffered"
                 portSharingEnabled="false">
          <security mode="None">
            <transport clientCredentialType="None" />
            <message clientCredentialType="None" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    

    这个绑定没有安全性。

        2
  •  1
  •   Mr. Smith    15 年前

    你可能不得不 Enable the Net.TCP Port Sharing Service .来自msdn的报价:

    Windows通信基金会(WCF) 使用名为的Windows服务 net.tcp端口共享服务到 方便TCP端口的共享 跨多个进程。这个 服务作为WCF的一部分安装, 但是服务不是由 作为安全预防措施的违约 因此必须在 第一次使用。本主题介绍如何 配置网络TCP端口共享 使用Microsoft管理的服务 控制台(MMC)管理单元。

    祝你好运!

        3
  •  0
  •   softveda    15 年前

    尝试为http和net.tcp绑定使用不同的端口号。端口共享的目的不同,在多个进程之间共享同一个net.tcp端口。