Как размещать службы WCF через TCP-порты и как прослушивать их и использовать службы через эти TCP-порты?
То есть, помимо привязки net.tcp, есть ли какой-то способ размещения и использования с использованием TCP-портов?
Как размещать службы WCF через TCP-порты и как прослушивать их и использовать службы через эти TCP-порты?
То есть, помимо привязки net.tcp, есть ли какой-то способ размещения и использования с использованием TCP-портов?
В WCF вы можете самостоятельно разместить любую службу, создав экземпляр класса ServiceHost, настроив его с правильными конечными точками и реализацией службы, которую вы хотите предоставить, и вызовите для нее Open
. Это называется самостоятельное размещение, поскольку вы размещаете службу (и ее прослушиватели портов) в своем собственном приложении.
В качестве альтернативы вы можете разместить свою службу в IIS, но вы должны знать, что, хотя вы можете разместить WCF в IIS 6, он позволяет размещать только конечные точки HTTP и HTTPS. Если вы хотите разместить конечные точки TCP в IIS (что является хорошей идеей), вам понадобится IIS 7.
Подробнее читайте здесь.
вы можете использовать любой порт (при условии, что у вас есть на это разрешение) для размещения ваших служб wcf. при использовании IIS для размещения служб wcf это несколько отличается, но в средах с самостоятельным размещением просто добавьте номер порта к вашему базовому адресу, и все готово. (при использовании Vista или Server 2008 вам необходимо предоставить доступ к порту, если вы не работаете с правами администратора (например, используя netsh))
использовать напр. порт 1337 для службы http (или net.tcp), просто добавьте «:1337/» к вашему базовому адресу, и все остальное будет сделано за вас.
Может это поможет
<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>
Все привязки 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" />
in IIS create a web site (or virtual directory) and configure it's binding to run on the port you chose in your baseAddress service configuration (8000 for the example above).
Результатом описанных выше шагов является служба WCF, которая работает на TCP-порту 8000 для транспортного уровня, используя HTTP в качестве транспортного протокола.
Редактировать: я полагаю, что вы немного запутались. Если то, что вы пытаетесь достичь, представляет собой передаваемый двоичный пакет, то единственным доступным решением является привязка net.tcp, несовместимая с IIS.6. Если вы просто хотите иметь возможность выбрать TCP-порт соединения, то любая привязка HTTP может сделать это, как показано в моем примере выше, и может использоваться в IIS.6.
Я знаю, что это немного поздно. Но я полагаю, вы могли бы использовать приложение «WCF Service Host», которое поставляется с Visual Studio.