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.
Любые предложения о том, как отследить, что вызывает эту ошибку?