Несколько портов привязки WCF - PullRequest
1 голос
/ 23 ноября 2011

Когда у меня много конечных точек в моей службе WCF ...

Было бы разумно или возможно использовать для них одни и те же номера портов.

Проблема в том, что при развертывании службы слишком много номеров портов для запоминания для разных используемых привязок.

Ответы [ 2 ]

5 голосов
/ 23 ноября 2011

Это, конечно, возможно, и я бы сказал, мудро - особенно если вы размещаете его в качестве веб-службы на порту 80, но даже и на 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 голос
/ 23 ноября 2011

Если у вас есть несколько конечных точек в одной службе, возможно, с разными контрактами или привязками, то вы можете использовать относительную адресацию, используя базовый адрес, как показано ниже.

<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>
...