Службы WCF изначально используют атрибуты, просто проверяйте классы, такие как:
ServiceContractAttribute
, OperationContractAttribute
MessageContractAttriubte
, MessageHeaderAttriubte
, MessageBodyMemberAttribute
WebGetAttribute
, WebInvokeAttribute
ServiceBehaviorAttribute
, OperationBehaviorAttribute
, CallbackBehaviorAttriubte
ServiceKnownTypeAttribute
, FaultContractAttriubte
DataContractFormatAttribute
, XmlSerializerFormatAttribute
TransactionFlowAttribute
, DeliveryRequirementsAttribute
AspNetCompatibilityRequirementsAttribute
- и ряд других
Эти атрибуты влияют на обработку WCF, но также WCFпредлагает большую модель расширяемости с несколькими точками внедрения, где вы можете добавить свою собственную обработку, внедрив любой из этих интерфейсов в пользовательский атрибут:
IServiceBehavior
- влияет на весь сервис IEndpointBehavior
- влияет на одну конечную точку IOperationBehavior
- влияет на одну операцию IContractBehavior
- влияет на одну услугу или контракт данных
Эти поведения могут содержать некоторую логику или добавитьнекоторые другие более продвинутые пользовательские функции, такие как:
IParameterInspector
- например, проверка пользовательских параметров для операции IDispatchMessageFormater
- работа с сериейЛизинг и десериализация на стороне сервера IClientMessageFormater
- работа с сериализацией и десериализацией на стороне клиента IDispatchMessageInspector
- модификация или проверка сообщений на стороне сервера IClientMessageInspector
- изменение или проверка сообщения на стороне клиента IDispatchOperationSelector
- выбор операции обработки входящего сообщения на стороне сервера IClientOperationSelector
- на основе вызываемого прокси-метода можно выбрать другую операцию для вызовасо стороны клиента IOperationInvoker
- вызов операции - позволяет работать с параметрами операции и, например, добавлять другие параметры, которые не были переданы в сообщении, но хранятся локально IErrorHandler
-обработка глобальных ошибок IInstanceContextProvider
- обработка контекста настраиваемого экземпляра - основа, если вы хотите реализовать настраиваемую обработку сеанса в WCF IInstanceProvider
- обработка срока действия настраиваемого экземпляра службы - any any any
Как видите, расширяемость WCF довольно велика - ИМХО с ASP.NET MVC лучший в целом .NET Framework (по крайней мере, среди частей, которые я регулярно использую).Более того, пользовательское поведение - это только одна часть расширяемости WCF.Вторая часть касается пользовательских привязок и каналов.
Если вы хотите узнать больше о проверке расширяемости WCF
Но это то, что вам нужно?Сначала проверьте существующие атрибуты, если они уже предлагают вам функциональность, которую вы ищете.Теперь подумайте о сессии - сессия ASP.NET обычно не предоставляется службе WCF.Вы должны включить AspNetCompatibility, после чего вы переведите службу WCF в службу ASMX.Даже после этого у вас могут возникнуть проблемы с сеансом ASP.NET, потому что информация о сеансе передается в cookie, а WCF по умолчанию их не использует.
Наконец, если вам нужны только некоторые пользовательские атрибуты для добавления логики вдля выбранных методов это больше похоже на сценарий для AoP (аспектно-ориентированного программирования), который может быть предложен за пределами WCF через несколько контейнеров IoC (инверсия управления), таких как MS Unity, Windsor Castle или Spring.NET.Другой вариант - чистый фреймворк AoP - PostSharp.
Для AoP с Unity вы можете проверить несколько статей Дино Эспозито из журнала MSDN:
Для Spring.NET простопроверьте их отличная документация .Я не использовал AoP с Windsor, но вы найдете множество статей в Интернете.PostSharp - единственный упомянутый инструмент, который является коммерческим.Он имеет бесплатную версию с меньшим набором функций, но вы можете обнаружить, что нужные вам функции есть только в коммерческой версии.