IIS прекращает подключение к службе WCF до тех пор, пока пул приложений не будет переработан

У меня есть приложение ASP.NET MVC, размещенное на IIS 8.5. Сайт будет работать без перебоев от нескольких часов до нескольких дней, но, в конце концов, начнет получать исключение EndpointNotFoundException при попытке подключиться к службе WCF, размещенной через net.tcp на другом компьютере.

Если я пытаюсь подключиться к службе WCF с компьютера IIS, используя другой пул приложений, консольное приложение и т. Д., Все они подключаются без ошибок. Не каждая попытка подключения не удается, просто большинство из них.

Как только я перезапускаю пул приложений, все снова начинает работать.

Я не вижу ничего в средстве просмотра событий, и Elmah не показывает никаких других ошибок, прежде чем EndpointNotFoundException начнет обнаруживаться.

У меня все вызовы WCF обернуты в блоки try/catch, которые будут выполнять необходимые команды close / abort, чтобы убедиться, что все клиенты правильно закрыты. Вот код, который используется.

try
{
    action();
}
finally
{
    try
    {
        client.Close();
    }
    catch
    {
        client.Abort();
    }
}

Я также создал приложение, которое контролирует сервер. Если он видит, что сервер начинает получать ошибки, он пытается перезапустить пул приложений с помощью следующего кода:

var serverManager = new ServerManager();
var pool = serverManager.ApplicationPools.Single(p => p.Name == "POOLNAME");
pool.Recycle();

Тем не менее, даже этот код не останавливает исключения. Я должен вручную войти в систему, открыть диспетчер IIS, щелкнуть правой кнопкой мыши пул приложений и нажать кнопку recycle.

У меня есть несколько других серверов / клиентов WCF в приложениях, таких как Winforms и службы Windows, которые не имеют этой проблемы. Проблемы возникают только с клиентским приложением, размещенным на IIS.

Любые предложения о том, как отследить, что вызывает эту ошибку?

0 ответов

Другие вопросы по тегам