我将 TokenId 作为所有请求的 Soap Header 传递。
<soapenv:Header> <tem:TokenIdentity>12345</tem:TokenIdentity> </soapenv:Header>
例如,我有 5 个网络方法。我希望在访问任何 webmethods 之前自动调用 ValidateTokenId() 方法。
以前有人做过吗?
我将 TokenId 作为所有请求的 Soap Header 传递。
<soapenv:Header> <tem:TokenIdentity>12345</tem:TokenIdentity> </soapenv:Header>
例如,我有 5 个网络方法。我希望在访问任何 webmethods 之前自动调用 ValidateTokenId() 方法。
以前有人做过吗?
我得到了验证令牌的解决方案
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