在SoapExtension取当前Action的探索
近几天考虑为webservice加密,发现SoapMessage的Action很不可靠。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
苦苦查找的过程终于感觉到WCF的好处,当然转换可行性似乎没有。跟踪代码发现Request.Headers有SOAPAction可用。
case SoapMessageStage.BeforeDeserialize:
//this.actionName = message.Action;//客户端可以取出
string actionName = (string)HttpContext.Current.Request.Headers["SOAPAction"].Trim('"');
//this.actionName = message.Action;//客户端可以取出
string actionName = (string)HttpContext.Current.Request.Headers["SOAPAction"].Trim('"');
我希望整个扩展类都能随时用上Action,于是我把取Action写在了初始化的两个方法里。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
为什么是两个,说是在每个请求时第一个方法[GetInitializer(Type t)]只会执行一次,但我们的SoapExtension扩展类会被多次构造(跟踪代码看起码两次),每构造一次都会执行第二个方法[Initialize(object initializer)],并把第一个方法返回的object作为第二个方法的参数[initializer]。上面代码的扩展类是ConnectEncryption,继承自 SoapExtension。