Я звоню в службу WCF из формы. Сервис размещен в IIS. Служба со следующими атрибутами: InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple
Я установил максимальный режим регулирования на 2000 для всех одновременных вызовов, экземпляров и сеансов.
Однако я не могу получить более 200 запросов ASynch. После этого служба просто не отвечает, и время сеанса заканчивается.
Я использую вызов Asynch для вызова метода в службе, т.е.
Свернуть | Скопировать код
IASyncResult res = Proxy.BeginMethod (endCall, null);
и затем для получения ответа у меня есть функция endCall, которая принимает IASyncResult и обрабатывает результат через EndMethod ().
в методе имитации загрузки @ 1 вызов в секунду, все работает нормально до примерно 200 вызовов, а затем просто ждет ... (У меня есть 199 или 198 ответов от этих 200 вызовов в данный момент времени) .. - так что теоретически не должно быть 200 одновременных сессий, только 2 или около того ..
Возможно, есть какая-то сборка мусора или закрытие, которое я не делаю?
какие-либо предложения?
---- обновление ---
Я думаю, что ответ может быть еще больше, что закрытие прокси не обрабатывается потокобезопасным способом. Как указывает Radik выше, закрытие прокси-сервера очень важно, однако при одновременном поступлении многих результатов IASyncState необходимо убедиться, что вы закрыли нужный в нужное время.
Я попытался запустить закрытый прокси из потока, чтобы он мог обрабатывать его отдельно:
ThreadPool.QueueUserWorkItem (CloseProxy, ar.AsyncState);
но это не похоже на работу. Есть предложения по этому поводу?