Как создать прослушиватель событий WCF ServiceHost, когда служба размещается в IIS? - PullRequest
3 голосов
/ 04 декабря 2008

У меня есть служба WCF, которая будет размещена в IIS. Теперь у меня есть некоторые ресурсы (Соединения), которые я создаю в конструкторе сервисов. Мне нужно освободить эти ресурсы, когда IIS, на котором размещается служба, закрывается или сбрасывается. Это не те ресурсы, которые я буду очищать каждый раз, когда клиент отключается, а ресурсы всего приложения, которые освобождаются только при закрытии самой службы или IIS.

Я видел другой пост, где кто-то упомянул, что он создал слушателя для захвата событий ServiceHost. Может ли кто-нибудь помочь мне разобраться, как получить дескриптор ServiceHost и захватить событие сброса IIS или завершения работы IIS и освободить мои ресурсы в службе WCF?

Ответы [ 3 ]

3 голосов
/ 04 декабря 2008

Вы можете использовать шаблон IDisposable с финализатором для класса, который содержит ресурсы.

При выгрузке AppDomain все объекты завершаются, и если объект, имеющий ссылку на ресурсы (такие подключения), имеет финализатор, вызывается финализатор, и вы можете закрыть / утилизировать ресурсы в этой точке.

3 голосов
/ 04 декабря 2008

Ну, у меня нет идей, но я думаю, что эта статья содержит ваш ответ в главе "Доступ к ServiceHost в IIS". Кажется, вам нужно создать свой собственный HostFactory, потому что IIS использует стандартный HostFactory и практически контролирует создание и уничтожение хостов. Предоставляя свой собственный HostFactory, вы можете добавить свой собственный код для управления инициализацией и уничтожением ...

0 голосов
/ 04 декабря 2008

Смысл сервисов WCF и хостинга IIS заключается в достижении масштабируемости и упрощении хостинга. Хотя вы можете подключаться к событиям, предоставляемым классом ServiceHostBase (см. здесь ), я бы порекомендовал против этого и проанализировал, действительно ли вам нужны эти общие ресурсы. Основными причинами просьбы переосмыслить: общие ресурсы должны быть поточно-ориентированными (IIS может обслуживать много запросов одновременно), поэтому это создает узкое место для масштабируемости вашего приложения, и, во-вторых, лучше, если ваши службы не сохраняют состояние, и это включает (я предполагаю) использование общих ресурсов (или ресурсов всего приложения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...