Что нового для WCF в Visual Studio 2008 - Узел, предоставляемый WCF

ОГЛАВЛЕНИЕ

Узел, предоставляемый WCF

В Visual Studio 2008 имеется готовый универсальный узел для размещения служб WcfSvcHost.exe. Он расположен в папке C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE. Чтобы удобнее было работать с ним, можно этот адрес добавить в системную переменную Path. WcfSvcHost — это простая программа командной строки, имеющая два параметра: путь к файлу сборки .NET, содержащей классы службы, и путь к файлу CONFIG узла, на котором размещаются службы. Например так:

WcfSvcHost.exe /service:MyService.dll  /config:App.config

Сборка службы может представлять собой сборку библиотеки классов (DLL) или сборку приложения (EXE). Узел WcfSvcHost запустит новый процесс, в котором будут автоматически размещаться все классы, перечисленные в файле CONFIG в разделе служб. Стоит отметить, что классы служб, равно как и контракты служб и данных, не обязательно должны быть открытыми — это могут быть внутренни классы. Кроме того, при саморазмещении службам не обязательно предоставлять метаданные, но в случае необходимости они могут это делать.
WcfSvcHost — это приложение Windows Forms. При его запуске в области уведомлений появляется значок. Чтобы закрыть узел, нужно щелкнуть этот значок правой кнопкой мыши и в контектсном меню выбрать команду «Выход». Выход таким способом выполняется довольно жестко: узел WcfSvcHost прерывает все выполняемые вызовы, а клиенты с высокой долей вероятности получают исключение. Если щелкнуть значок WcfSvcHost в области уведомлений, появится диалоговое окно со списком размещенных служб (см. рис. 2).

 

Рис. 2 Список WcfSvcHost Services

В этом же окне отображается состояние службы и адрес ее метаданных — его можно скопировать в буфер, и использовать, к примеру, для добавления ссылки на службу. Если закрыть окно WcfSvcHost, то оно просто свернется в значок в области уведомлений.

WcfSvcHost был создан для того, чтобы во время разработки можно было не использовать дополнительный узел для размещения библиотеки службы. Разработка подобных проектов размещения — задача, которую выполняют постоянно. Размещающие узлы обычно содержат один и тот же код, а при наличии нескольких библиотек служб решение значительно разрастается. Для целей разработки и тестирования узел WcfSvcHost можно интегрировать в проекты создания библиотек служб в Visual Studio 2008. Для этого в панели отладки (в свойствах проекта) нужно задать WcfSvcHost.exe в качестве внешней вызываемой программы, а указать имя библиотеки классов и файла CONFIG (он автоматически создается и копируется в папку bin).

После этого при запуске библиотеки классов (раньше это было вообще невозможно) она автоматически размещается на узле WcfSvcHost, и к процессу прикрепляется отладчик. Если остановить отладку, работа узла в Visual Studio 2008 завершится некорректно.

Узел WcfSvcHost можно даже использовать в приложениях .NET Framework 3.0 и проектах Visual Studio 2005, поскольку для работы узла требуется только платформа .NET Framework 3.0. Для этого узел WcfSvcHost нужно просто скопировать с того компьютера, на котором установлена система Visual Studio 2008. Чтобы упростить работу, можно добавить WcfSvcHost в глобальный кэш сборок на том компьютере, где установлена платформа .NET Framework 3.0.

И последняя функция WcfSvcHost — это возможность автоматического запуска клиентских приложений и предоставление клиенту дополнительных параметров, используемых в приложении:

WcfSvcHost.exe /service:MyService.dll  /config:App.config                  
  /client:MyClient.exe /clientArgs:123,ABC 

Эта функция может использоваться при автоматическом тестировании и в простейших сценариях развертывания для обеспечения запуска обеих частей системы — и размещающего узла, и клиента.

Главным недостатком узла WcfSvcHost является его способность работать только с простейшими задачами, не предполагающими ни программного доступа к экземпляру узла перед его открытием, ни программного доступа к модели событий после. В отличие от служб IIS или службы активации Windows этот узел не поддерживает размещение фабрики узла службы. Вследствие этого отсутствует возможность динамически добавлять базовые адреса, настраивать конечные точки, ускорять вызовы, настраивать пользовательские варианты поведения на уровне узла и т. д. Опыт работы с WCF показывает, что лишь в какиех-то простейших ситуациях можно обойтись без программного доступа к экземпляру хоста, поэтому я не считаю, что узел WcfSvcHost может полноценно применяться в производственной среде наравне со службой активации Windows или выделенным размещающим узлом.