Дуплексная служба WCF и исчерпание TCP-порта - PullRequest
4 голосов
/ 13 ноября 2008

Я пытаюсь обернуть голову вокруг этого. Я создаю приложение для обмена сообщениями, ориентированное на бизнес, оно собирается подключать от 5000 до 10000 компьютеров обратно к нашему центру обработки данных через WCF (без vpns, по всей сети). Это в основном для оповещений, и мне нужно иметь возможность отправлять сообщения конкретным клиентам, и WCF позволяет мне делать все это с помощью дуплексного контракта, но с таким большим количеством клиентов я подумал о том, чтобы максимально увеличить пространство портов TCP 65535 портов.

Я собираюсь предположить, что все входящие соединения будут входить через любой порт, который я выберу, но для клиентов с перебоями будет использоваться один порт. Мне интересно, если служба общего доступа к портам WCF что-то решает, или это всего лишь 65535 портов с IP-адресом? В этом отношении, как MSN Messenger и тому подобное справляются с этой ситуацией. Конечно, я никогда не достигну этого, но, по крайней мере, я вхожу в царство.

Или дуплексный контракт WCF на стороне службы сохраняет порт открытым для обратного вызова на время клиента или освобождает его?

Ответы [ 4 ]

4 голосов
/ 13 ноября 2008

По-прежнему довольно легко использовать стандартный TCP-стек в среде транзакций с высоким уровнем открытия / закрытия, например. сервер сокетов, обслуживающий непостоянные соединения.

Это исчерпывается задержкой TIME-WAIT по умолчанию - период времени, в течение которого сокет должен быть закрыт перед повторным использованием - по умолчанию это 90 с (если я правильно помню)

Чтобы переработать некоторые биты из одного из моих других потоков - есть несколько разделов реестра, которые можно настроить - предложить, по крайней мере, следующие ключи созданы / отредактированы

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

TcpTimedWaitDelay = 30
MaxUserPort = 65534 
MaxHashTableSize = 65536 
MaxFreeTcbs = 16000 

Множество документов по MSDN & Technet о функциях этих клавиш. например, * +1008 *

http://technet.microsoft.com/en-us/library/cc776295.aspx

Довольно часто эти ключи настраиваются для приложений на сокет-серверах, например SQL, Biztalk, IIS и т. Д.

3 голосов
/ 13 ноября 2008

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

т.е. Вы можете иметь несколько абонентов, с которыми разговаривают на одном и том же порте источника. Это просто становится вопросом емкости.

2 голосов
/ 13 ноября 2008

Соединения различаются (по крайней мере на уровне IP) по адресу источника и адресу назначения, порту источника, порту назначения. Некоторое ограничение ОС на максимальное количество соединений может стать проблемой, но не зацикливайтесь на идее, что сами номера портов являются каким-либо реалистичным ограничением.

2 голосов
/ 13 ноября 2008

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

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

...