WCF多个绑定端口号

时间:2011-11-22 22:33:25

标签: wcf binding numbers port

当我的WCF服务中有许多端点时......

为他们重复使用相同的端口号是明智的还是可能的。

问题是当部署服务时,有太多的端口号需要记住所使用的不同绑定。

2 个答案:

答案 0 :(得分:5)

这当然是可能的,我也会说明智 - 特别是如果你将它作为端口80上的Web服务托管,但即使是TCP也是如此。每个服务都有一个端口对我来说似乎有点过分。

虽然每个绑定都需要一个端口(因此选择一个用于TCP的端口,一个用于HTTP等)。

您可以为您的服务指定相同的根地址(这是JSON REST服务,但绑定无关紧要) - 请注意地址属性:

<system.serviceModel>
  <services>
    <service name="Demo.SampleService2Implementation">
      <endpoint address="http://localhost:85/sample2"
                behaviorConfiguration="json"
                binding="webHttpBinding"
                name="jsonEndpoint2"
                contract="Demo.ISampleService2" />
    </service>

    <service name="Demo.SampleServiceImplementation">
      <endpoint address="http://localhost:85/sample1"
                behaviorConfiguration="json"
                binding="webHttpBinding"
                name="jsonEndpoint1"
                contract="Demo.ISampleService" />
    </service>
  </services>
  <behaviors>
    <endpointBehaviors>
      <behavior name="json">
        <webHttp/>
      </behavior>
    </endpointBehaviors>
  </behaviors>
</system.serviceModel>

这是客户端配置:

<system.serviceModel>
  <client>
    <endpoint name="SampleServiceEndpoint"
              address="http://localhost:85/sample1"
              binding="webHttpBinding"
              contract="Demo.ISampleService"
              behaviorConfiguration="json">
    </endpoint>

    <endpoint name="SampleServiceEndpoint2"
              address="http://localhost:85/sample2"
              binding="webHttpBinding"
              contract="Demo.ISampleService2"
              behaviorConfiguration="json">
    </endpoint>
  </client>
  <behaviors>
    <endpointBehaviors>
      <behavior name="json">
        <webHttp/>
      </behavior>
    </endpointBehaviors>
  </behaviors>
</system.serviceModel>

答案 1 :(得分:1)

如果一个服务中有多个端点,可能具有不同的合同或绑定,那么您可以使用基址来使用相对寻址,如下所示。

<services>
  <service name="CalculatorService">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/CalculatorService"/>
        <add baseAddress="net.tcp://localhost:8001/CalculatorService"/>
      </baseAddresses>
    </host>
    <endpoint address="Mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <endpoint address="Basic" binding="basicHttpBinding" contract="IBasicCalculator" />
    <endpoint address="Scientific" binding="netTcpBinding" contract="IScientificCalculator" />
  </service>
</services>