2013-05-21 2 views
1

Я передаю TokenId в качестве заголовка мыла для всех запросов.Как проверить идентификатор токена перед вызовом каких-либо веб-методов?

<soapenv:Header> <tem:TokenIdentity>12345</tem:TokenIdentity> </soapenv:Header> 

например, у меня есть 5 веб-меток. Мне бы хотелось, чтобы этот метод ValidateTokenId() вызывался автоматически перед доступом к любым веб-методам.

Кто-нибудь сделал это раньше?

ответ

1

Я получил решение для проверки маркера

службы WCF реализованы (IDispatchMessageInspector) на следующие два метода, чтобы заботиться о проверке заголовка мыла и Протоколирование SOAP-запросы и SOAP-ответов.

AfterReceiveRequest метод Таким образом, все входящие запросы SOAP автоматически вызываются для ValidateToken() и будут регистрироваться тоже.

BeforeSendReply Все сообщения SOAP ответа регистрируются здесь.

#region IDispatchMessageInspector Members 
    public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext) 
    { 
     int headerIndex1 = OperationContext.Current.IncomingMessageHeaders.FindHeader("TokenIdentity", ""); 
     XmlReader r = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(0).ReadSubtree(); 
     XElement data = XElement.Load(r); 
     var tokenValue = (string)data; 

     ValidateToken(tokenValue); 

     //Log the Request with Log4Net or something 
     //Console.WriteLine("IDispatchMessageInspector.AfterReceiveRequest called."); 
     return null; 
    } 

    public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState) 
    { 
//Log the Response with Log4Net or something 
     //Console.WriteLine("IDispatchMessageInspector.BeforeSendReply called."); 
    } 
#endregion 
Смежные вопросы