Вопрос в AfterReceiveRequest заключается в том, как узнать пользовательский атрибут, установленный в Операции с помощью OperationDescription? Если есть способ, лучше ли устанавливать пользовательский атрибут в объявлении операции в интерфейсе контракта на обслуживание или в классе реализации службы?Как получить значение Custom Attribute для работы контракта WCF с использованием IDispatchMessageInspector
Для иллюстрации этого вопроса:
public interface IGetterSetterService
{
[OperationContract, GetterRequest]
Data[] GetData();
[OperationContract, SetterRequest]
bool SetData(string Data);
}
ИЛИ
[WebInvoke(Method = "*", ResponseFormat = WebMessageFormat.Json, UriTemplate = "xyz"]
[GetterRequest]
public Data[] GetData()
{
return new Data[];
}
[WebInvoke(Method = "*", ResponseFormat = WebMessageformat.Json, UriTemplate = "xyz/{data}"]
[SetterRequest]
public bool SetData(string data)
{
return true;
}
Теперь IDispatchMessageInspector:
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
//Here how to find out the GetterRequest or SetterRequest custom attribute set on an
//operation, may be using OperationDescription for the current context?
}
Я вижу вашу точку зрения на использование класса обслуживания. Спасибо за ваше решение! Кроме того, я хочу сохранить сборку, в которой интерфейс службы определен (и реализует MessageInspector), отдельно от сборки, которая реализует интерфейс службы, так что службы получают постоянную проверку сообщений как узел хоста службы (который отделен от всех этих) посредством default настраивает указанный инспектор сообщений (программно). Именно по этой причине мое решение находит пользовательские атрибуты из Operations Interface Operations, а не из класса реализации службы. – Vikrant