1

我将 TokenId 作为所有请求的 Soap Header 传递。

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

例如,我有 5 个网络方法。我希望在访问任何 webmethods 之前自动调用 ValidateTokenId() 方法。

以前有人做过吗?

4

1 回答 1

1

我得到了验证令牌的解决方案

WCF 服务实现(IDispatchMessageInspector)以下两种方法来处理 Soap 标头验证和记录 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
于 2013-05-21T21:21:17.830 回答