Служба WCF net.tcp работает в автономной среде. Я настроил принудительный сценарий, когда сервер будет запускать метод службы достаточно долго, чтобы время клиента истекло. То есть:
[OperationContract]
public bool someMethod() {
Thread.Sleep(60000);
return true;
}
На клиенте:
public void callSomeMethod() {
using (var proxy = getProxy()) {
proxy.someMethod();
}
}
Когда время ожидания клиента истекает через 60 секунд, на сервере просачивается одна или несколько меток. Повторное выполнение этого в конечном итоге приведет к сбою сервера, поскольку на нем нет ресурсов.
Примечание. На клиенте я намеренно не выполняю очистку, используя Close () / Abort () для этого теста. Моя теория состоит в том, что, если клиент когда-либо соединяется с сервером, но прерывается прежде, чем соединение может быть очищено, сервер протечет.
Последнее слово: когда я смотрю на ProcessExplorer, он показывает, что мои утечки - это сокеты TCP.
Есть ли лучший способ справиться с этой серверной стороной? Я видел ссылки на использование ChannelFactory, но я не уверен в деталях (это даже код на стороне сервера?). Если да, то даст ли мне больше контроля над тем, чтобы убедиться, что состояния ошибок корректно очищаются?
EDIT
С тех пор я провел некоторый поиск в ChannelFactory и вижу, что это функция на стороне клиента, а не на стороне сервера, поэтому не обращайте на это внимания. Тем не менее, все еще открыто о том, есть ли способ более правильно очистить утечку портов.