У меня есть дуплексный сервис WCF, который зависает после магических 10 прокси-копий. Конкретная ошибка на клиенте:
"System.TimeoutException: эта операция запроса, отправленная на net.tcp: // localhost: 8080 / RoomService / netTcp, не получила ответ в течение настроенного времени ожидания (00: 00: 59.9960000)".
На сервере нет видимых сообщений об ошибках.
Обратите внимание, что это не стандартная, очевидная проблема, т. Е. Не удается закрыть прокси-соединения, так как я закрываю каждый экземпляр прокси-соединения соответствующим образом перед открытием следующего:
try
{
client.Close();
}
catch (CommunicationException)
{
client.Abort();
}
catch (TimeoutException)
{
client.Abort();
}
catch (Exception)
{
client.Abort();
throw;
}
И я установил мое поведение регулирования на 500 одновременно:
ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior()
{
MaxConcurrentCalls = 500,
MaxConcurrentSessions = 500,
MaxConcurrentInstances = 500
};
Я установил для ConcurrencyMode моего сервиса значение Multiple и перепробовал все три возможных значения для InstanceContextMode.
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
Я пробовал самостоятельно размещать службу и размещать ее в IIS, и я получаю одинаковые результаты для каждого.
Я пробовал NetTcpBinding, WSDualHttpBinding и PollingDuplexBinding (в Silverlight) с одинаковыми результатами для каждого. Я не могу попробовать BasicHttpBinding или WSHttpBinding, так как это дуплексный сервис.
В моем коде было одно место, где я запускал несколько потоков (для одновременного выполнения нескольких обратных вызовов), но в целях устранения неполадок я прокомментировал это, и это не имело значения.
На клиенте я пытался использовать новые прокси для каждого теста и повторно использовать один и тот же прокси во всех тестах, но безуспешно. Я попытался создать новый InstanceContext для каждого прокси-сервера и повторно использовать один и тот же InstanceContext во всех прокси-серверах, и опять не повезло.
Что бы я ни делал, после 10-го теста, выполненного в моем тестовом жгуте, следующий вызов в сервис зависает.
Есть мысли о том, что я могу делать неправильно?