Захват глобальных событий запроса WCF ServiceHost - PullRequest
0 голосов
/ 17 марта 2011

Я использую действительно простой проект WCF, который размещается в приложении WPF.Он в основном работает как REST-сервер для хранения данных на моем ПК.Нет IIS, и он работает как SingleInstance. Я хочу посмотреть, какие IP-адреса обращаются к MyService, и какой WebMethod они пытаются вызвать.

Хорошо, поэтому я могу иметь событие как часть моей службы, объявленное в классе обслуживания.сам.Вот некоторый код, который запускает его, все работает точно так же, как и ожидалось (без пламени о m_, пожалуйста;)):

MyService ds = new MyService(); // It's not really called this :)
ds.Request += new EventHandler(ds_Request); // I want to avoid this
ds.SomePropertySetFromMyRehostingClient = "something"; // SingleInstance now required

m_Service = new ServiceHost(ds, new Uri(GetServerHostUri()));
m_Service.Description.Behaviors.Find<ServiceBehaviorAttribute>().InstanceContextMode = InstanceContextMode.Single;
m_Service.BeginOpen(new TimeSpan(0, 0, 5), new AsyncCallback(EndStartService), null);

Затем в каждом методе службы я могу вызвать это событие, чтобы мое приложение зналочто кто-то пытался его использовать.Гениально, но давайте посмотрим правде в глаза, это ужасно.

Я должен написать что-то вроде:

var who =  OperationContext.Current.IncomingMessageProperties.Via;
var what = OperationContext.Current.IncomingMessageProperties["UriTemplateMatchResults"];

для каждого вызова службы .

Есть ли более общийсобытие-ловушка, которое может обнаружить вызов к моему сервису? Вероятно, один из них был вызван одним из многих типов поведения / ChannelDispatcher, который, я правда, не совсем понимаю.

Спасибо за вашу помощь,Том

1 Ответ

2 голосов
/ 17 марта 2011

Используя IParameterInspector, вы можете подключиться к любым вызовам метода и проверить метод и / или параметры.

Нет другого способа получить дополнительную информацию (IP-адрес и т. Д.) Входящего сообщения, другуючем тот, который вы использовали.Это просто плохой дизайн от Microsoft IMHO (см. Мой трюк здесь ).

Вы можете найти пример здесь .

...