Как контролировать подключение клиента к сервису WCF? - PullRequest
4 голосов
/ 10 февраля 2010

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

  1. Объект ServiceHost должен создаваться сервером и использоваться как одноэлементный. Затем я должен предоставить начальный метод, вызываемый клиентом, чтобы зарегистрироваться в службе.
  2. Используйте монитор производительности для отображения счетчиков, связанных с услугой.

Ни (1), ни (2) не удовлетворяют мои потребности, потому что я хочу создать свое собственное приложение и, как я уже говорил, я не могу использовать одноэлементный режим. Вы когда-нибудь сталкивались с такой проблемой? Как тебе это удалось?

И последнее, но не менее важное: мне нужно также отслеживать вызовы для каждого метода, предоставляемого службой. Есть способ сделать это? Любая помощь будет оценена.

Ответы [ 2 ]

4 голосов
/ 10 февраля 2010

Есть ряд проблем с этим.

Прежде всего, предпочтительным методом вызова службы WCF является модель для каждого вызова, например, ваш клиент вызовет метод обслуживания, который вызывает создание экземпляра класса обслуживания на сервере, соответствующий метод выполняется, а затем экземпляр службы снова удаляется. Таким образом, вы не можете реально контролировать клиентские соединения как таковые - они существуют только доли секунды, пока выполняется вызов.

Кроме того, на стороне сервера на самом деле не так много инфраструктуры для отслеживания вызовов в секунду и т. Д., Кроме счетчиков производительности. Новый серверный аддон, ранее известный как «Дублин» (в настоящее время называется «AppFabric»), должен принести немало улучшений в этой области (управляемость) - для получения дополнительной информации см. Эту статью MSDN .

Но даже сегодня вы можете представить себе класс обслуживания и следить за его созданием и уничтожением. У класса обслуживания также есть ссылка на ServiceHost, которая создала его экземпляр через свойство OperationContext.Current.Host, так что вы могли бы каким-то образом представить хосту сигнал о том, что был создан новый экземпляр класса обслуживания. Можно использовать только один хост-объект, чтобы он мог работать, но для этого требуется хорошо продуманный и хорошо протестированный подход с поддержкой многопоточности на ServiceHost (вы можете создать свой собственный ServiceHost для достижения чего-то подобного).

Это может быть шагом в направлении "мониторинга моего сервиса". Что касается мониторинга производительности - почему существующие десятки счетчиков производительности WCF не помогут вам или не предоставят вам необходимую информацию?

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