Вместо того, чтобы беспокоиться об утилизации ваших веб-сервисов, вы можете хранить только один экземпляр каждого веб-сервиса, используя шаблон синглтона . Веб-службы не имеют состояния, поэтому их можно безопасно разделить между подключениями и потоками на веб-сервере.
Ниже приведен пример класса веб-службы, который можно использовать для хранения ссылок на экземпляры веб-службы. Этот синглтон ленив и потокобезопасен. Рекомендуется, чтобы ваши ленивцы оставались ленивыми, а также обеспечивали безопасность потоков, следуя той же логике. Чтобы узнать больше о том, как это сделать, прочитайте статью C # In Depth на Реализация синглетонов .
Также имейте в виду, что у вас могут возникнуть проблемы с веб-службами WCF. Я бы порекомендовал прочитать статью о методах управления экземплярами WCF *, в частности, раздел «Одиночка», для получения более подробной информации.
public static class WS
{
private static object sync = new object();
private static MyWebService _MyWebServiceInstance;
public static MyWebService MyWebServiceInstance
{
get
{
if (_MyWebServiceInstance == null)
{
lock (sync)
{
if (_MyWebServiceInstance == null)
{
_MyWebServiceInstance= new MyWebService();
}
}
}
return _MyWebServiceInstance;
}
}
}
И тогда, когда вам нужно получить доступ к вашему веб-сервису, вы можете сделать это:
WS.MyWebServiceInstance.MyMethod(...)
или
var ws = WS.MyWebServiceInstance;
ws.MyMethod(...)
Я успешно использовал этот шаблон в нескольких проектах, и он хорошо работал, но, как упоминает tvanfosson в комментариях ниже, еще лучшей стратегией было бы использование инфраструктуры DI для управления экземплярами веб-служб.