Размещение нескольких конечных точек службы WCF TCP на одном порту - PullRequest
2 голосов
/ 05 мая 2011

Я размещаю 3 службы WCF внутри служб Windows. Каждая служба WCF содержит несколько конечных точек. Прямо сейчас я размещаю все свои конечные точки через привязку TCP на разных портах. Есть ли способ разместить все эти конечные точки из разных служб wcf на одном и том же порту?

Ответы [ 3 ]

3 голосов
/ 06 мая 2011

Я просто посмотрел на это из любопытства. Поведение, которое я обнаружил, кажется настолько странным, что я почти не хочу помещать это здесь. Но в моем случае это сработало, так что, возможно, он делает то же самое для вас:

Я получаю AddressAlreadyInUseException , когда пытаюсь разместить 2 службы (т. Е. 2 ​​отдельных экземпляра ServiceHost) на одном и том же порту net.tcp с portSharingEnabled="True", установленным на netTcpBinding для обоих. Это происходит с запущенной службой общего доступа к портам Net.Tcp или без нее. Исключение выдается даже в том случае, если я только запускаю одну из служб (и с помощью netstat я проверил, что на этом же порту компьютера не было другого прослушивателя, плюс я запустил приложение с повышенными привилегиями).

Теперь забавно то, что AddressAlreadyInUseException не выбрасывается, когда я устанавливаю PortSharingEnabled = False, и все же обе службы полностью работают !! Еще раз, с или без службы общего доступа к портам. Я мог бы даже успешно подключиться к этим службам с другого компьютера.

Важное замечание, однако, заключается в том, что вышеприведенное применимо только в том случае, если службы размещены в одном и том же процессе! Он взорвется, если я попытаюсь запустить другой экземпляр приложения, который прослушивает тот же порт, но с другим базовым адресом. Но я предполагаю, что вы размещаете эти 3 службы WCF в одной и той же службе Windows?

Итак, хотя это и не кажется правильным, мой ответ будет: отключить PortSharingEnabled и посмотреть, работает ли он с разными BaseAddresses на одном и том же порту (при условии, что они все внутри одного и того же). процесс).

3 голосов
/ 05 мая 2011

Конечно, это! Вы можете использовать службу общего доступа к портам Net.TCP.

Net.TCP Port Sharing на MSDN

1 голос
/ 19 января 2013

Насколько я знаю, вам нужно не только включить общий доступ к портам в конфигурации (или с помощью кода), но и вручную запустить службу общего доступа к портам Windows.

Вот почему я (с похожей проблемой) не хотел использовать совместное использование портов, чтобы облегчить развертывание, а не связываться с другими вещами, которые пользователь может знать или не знать.

...