Как разместить WCF через порты TCP? - PullRequest
5 голосов
/ 29 июня 2009

Как разместить службы WCF через порты TCP и как прослушивать и использовать службы через эти порты TCP?

То есть, кроме привязки net.tcp, есть ли какой-нибудь способ для размещения и потребления через порты TCP?

Ответы [ 5 ]

8 голосов
/ 29 июня 2009

В WCF вы можете самостоятельно разместить любую службу, создав экземпляр класса ServiceHost, сконфигурировав его с правильными конечными точками и реализацией службы, которую вы хотите предоставить, и вызвав Open для нее. Это называется self-hosting , поскольку вы размещаете службу (и ее прослушиватели портов) из своего собственного приложения.

В качестве альтернативы вы можете разместить свою службу в IIS, но вы должны знать, что, хотя вы можете размещать WCF в IIS 6, он позволяет вам размещать только конечные точки HTTP и HTTPS. Если вы хотите разместить конечные точки TCP в IIS (что является хорошей идеей), вам потребуется IIS 7.

Подробнее здесь .

0 голосов
/ 13 октября 2010

Я знаю, что немного поздно .. Но, я полагаю, вы могли бы использовать приложение "WCF Service Host", которое поставляется с Visual Studio.

0 голосов
/ 29 июня 2009

Может быть, это поможет

<services>
  <service behaviorConfiguration="configname"
    name="servicename">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="MyServiceBinding"
      name="NetTcpBindingEndpoint" bindingName="MyServiceBinding"
      contract="Interface">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>

    <endpoint address="mex" binding="customBinding" bindingConfiguration="myMexTcpBinding"
      name="MexTcpBindingEndpoint" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:prot/TestService" />
      </baseAddresses>
    </host>
  </service>
</services>
0 голосов
/ 29 июня 2009

Все HTTP-привязки работают с TCP для транспортного уровня. Таким образом, вы можете использовать HTTP-привязки и IIS.6 для размещения службы WCF, которая работает на определенном порту TCP.

Вот пошаговое руководство о том, как этого добиться:

  • настроить службу для запуска на желаемом порту из файла конфигурации (или кода):

    <service name="WCFService" behaviorConfiguration="DefaultBehaviour">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/WCFService" />
      </baseAddresses>
    </host>
    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="WCFService_mexEndpoint" contract="IMetadataExchange" />
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultBinding" name="WCFService_Endpoint" contract="WCFService.IService1" />
    

  • в IIS создайте веб-сайт (или виртуальный каталог) и настройте его привязку для запуска на порту, выбранном вами в конфигурации службы baseAddress (8000 для примера выше).

Результатом описанных выше шагов является служба WCF, которая работает на TCP-порту 8000 для транспортного уровня, используя HTTP в качестве транспортного протокола.

Редактировать : Я полагаю, вы здесь немного путаетесь. Если вы пытаетесь достичь двоичного переданного пакета, то единственное доступное решение - это привязка net.tcp, которая не совместима с IIS.6. Если вы просто хотите иметь возможность выбрать TCP-порт соединения, то любая HTTP-привязка может сделать это, как показано в моем примере выше, и может использоваться в IIS.6.

0 голосов
/ 29 июня 2009

вы можете использовать любой порт (если у вас есть на это разрешение) для размещения ваших сервисов wcf. при использовании IIS для размещения служб wcf это несколько иное, но в средах с самостоятельным размещением просто добавьте номер порта к базовому адресу, и все готово. (при использовании Vista или Server 2008 необходимо предоставить доступ к порту, если он не работает с правами администратора (например, с использованием netsh))

для использования, например порт 1337 для службы http (или net.tcp) просто добавьте «: 1337 /» к вашему базовому адресу, и все остальное за вас.

...