Хотя вы можете использовать событие OnStart HttpApplication для перехвата при запуске службы, а также IHttpModule для перехвата запросов , это , а не правильным способомвыполнить эти перехваты в WCF.
Единственная причина, по которой рекомендация работает, заключается в том, что вы размещены в IIS и используете специфичные для IIS перехватчики.Однако службы WCF могут быть размещены где угодно, и вы можете обнаружить, что вы перемещаете свою службу в процесс службы, а также меняете привязки (вы можете использовать net-tcp вместо http, например, в этом случае, как бы вычитать содержимое, поступающее через реализацию IHttpModule? Вы не могли бы), что могло бы привести к разрыву этих хуков.
При этом в идеале вы должны выполнить любую инициализацию перед созданием ServiceHost пример.Однако, поскольку у вас нет доступа к экземпляру ServiceHost в WCF в IIS, вам придется реализовать пользовательские ServiceHostFactory и , указывающие эту фабрику в файле SVC (см. Раздел, озаглавленный ИспользованиеCustom ServiceHost в IIS или WAS). При таком подходе он станет переносимым.
Что касается перехвата вызовов, вы можете сделать это на клиенте и на стороне службы.На стороне клиента вы бы реализовали IClientMessageInspector , а на стороне сервера вы хотите IDispatchMessageInspector (я полагаю, вы хотите последнее).
Для того, чтобы «внедрить»этот инспектор на стороне службы, вы должны будете использовать поведение конечной точки (которое будет применяться к определенной конечной точке службы, реализацию IEndpointBehavior ) или поведение службы (которое применяется ко всем конечным точкам насервис, через реализацию интерфейса IServiceBehavior ).
Именно через эти реализации вы бы посмотрели на ServiceEndpoint (для поведения конечных точек) или Класс ServiceDescription для применения реализации вашего инспектора или любых других хуков, доступных в WCF.
Вы можете прочитать "Написание инспектора сообщений WCF" Паоло Пиалорси дляполное пошаговое руководство о том, как собрать все это вместе и дать вам представление о нестандартном поведении в WCF..