Как заставить конечную точку mex net.tcp (mexTcpBinding) участвовать в совместном использовании портов?

У меня есть служба WCF, которая размещена как служба Windows. Мы хотели бы включить конечную точку mex по тому же адресу (но с суффиксом «/ mex»). Я пытался сделать это (безуспешно), используя следующую конфигурацию:

<system.serviceModel>

  <services>
    <service
      name="MyCompany.MyService"
      behaviorConfiguration="defaultServiceBehavior">

      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://localhost"/>
        </baseAddresses>
      </host>

      <endpoint
        address="MyService"
        binding="netTcpBinding"
        contract="MyCompany.IMyService"
        bindingConfiguration="netTcpBindingConfig"
        />

      <endpoint
        address="MyService/mex"
        binding="mexTcpBinding"
        contract="IMetadataExchange"
        />

    </service>
  </services>

  <behaviors>
    <serviceBehaviors>
      <behavior name="defaultServiceBehavior">
        <serviceMetadata />
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <bindings>
    <netTcpBinding>
      <binding name="netTcpBindingConfig" portSharingEnabled="true" />
    </netTcpBinding>
  </bindings>

</system.serviceModel>

При запуске хост службы выдает исключение AddressAlreadyInUseException с жалобой на то, что «На конечной точке IP 0.0.0.0:808 уже есть прослушиватель. ". На самом деле это имеет смысл для меня, потому что служба совместного использования портов открыла этот порт для обслуживания конечной точки MyService вместе с любыми другими службами, запрашивающими совместное использование этого порта на этой машине.

Таким образом, похоже, что Конечной точке mex нужен эксклюзивный доступ к порту 808. Я могу обойти это, настроив конечную точку mex следующим образом:

<endpoint
  address="net.tcp://localhost:818/MyService/mex"
  binding="mexTcpBinding"
  contract="IMetadataExchange"
  />

Это означает, что конечная точка mex теперь имеет свой собственный эксклюзивный порт. Обратной стороной этого является то, что любой другой службе, которая хочет предоставить доступ к конечной точке mex, также потребуется уникальный порт для своей конечной точки mex. Это делает его очень непредсказуемым при поиске конечных точек mex.

Есть ли способ заставить конечную точку mex участвовать в совместном использовании портов?

11
задан Cris Luengo 1 October 2018 в 22:18
поделиться