Добавить обработчик события для конкретного класса WCF - PullRequest
0 голосов
/ 12 ноября 2009

Можно ли извлечь конкретный экземпляр класса из ServiceHost, чтобы я мог добавить обработчик событий для событий этого класса?

Public Class Widget
      Public Event MessageCalled(sender as object, e as EventArgs)
      Public Sub DoSomething()
         '-- do a whole lot of stuff --'
         RaiseEvent MessageCalled(Me, new EventArgs())
      End Sub
End Class


Private _host As New ServiceHost(GetType(Widget), New Uri() {New Uri("http://localhost:50000")})

Поэтому, когда клиент вызывает метод DoSomething (), я могу обработать событие MessageCalled () на хосте.

Большая часть того, что я нашел, говорит об обработке событий на клиенте, но мне это не интересно.

Ответы [ 2 ]

1 голос
/ 13 ноября 2009

Я думаю, вам лучше использовать точки расширяемости, предоставляемые средой выполнения WCF, а не пытаться использовать подобное событие. Для начала ознакомьтесь с разделом SDK под названием Расширение WCF .

.

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

1 голос
/ 12 ноября 2009

Я не совсем понимаю, что вы пытаетесь сделать, но, думаю, вы хотите получить экземпляр класса обслуживания от хоста службы?

Хорошо, подумайте об этом: если у вас есть сервисный хост в занятой системе, есть большая вероятность, что вы могли бы одновременно обслуживать несколько одновременных клиентских запросов. По умолчанию в WCF каждый клиентский запрос получает свой собственный экземпляр класса службы, что опять же означает, что среда выполнения WCF могла бы раскручивать несколько экземпляров «Виджета» с вашего хоста службы - какой из этих n экземпляров вы хочу?

Как правило, между ServiceHost и размещенным в нем классом обслуживания нет отношения 1: 1. По крайней мере, вы не можете полагаться на то, что это отношение 1: 1. Я не знаю ни одного способа получить один (или все несколько) экземпляров класса обслуживания с экземпляром ServiceHost, извините.

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

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