WebService 信息攔截實現訪問日志功能


webservice 實現攔截供其實相對比較簡單,但是要獲取攔截的信息我覺得是比較麻煩,之前因為對這個不懂也是查閱了很多資料才完成了這一塊的功能。要實現這個功能就要實現抽象類:SoapExtension,重寫:ProcessMessage方法。要實現獲取比如:訪問的方法名稱,參數,返回值等信息就要重寫:ChainStream方法.實現代碼如下:

public class MsgSoapExtension : SoapExtension
{
Stream _requestStream;
Stream _responseStream;
XmlDocument _requestXml;
XmlDocument _reponseXml;
public override void ProcessMessage(System.Web.Services.Protocols.SoapMessage message)
{
switch (message.Stage)
{
case SoapMessageStage.AfterDeserialize:
break;
case SoapMessageStage.AfterSerialize:
_reponseXml = SetContentToXml(_responseStream);
CopyStream(_responseStream, _requestStream);
break;
case SoapMessageStage.BeforeDeserialize:
CopyStream(_requestStream, _responseStream);
_requestXml = SetContentToXml(_responseStream);
break;
case SoapMessageStage.BeforeSerialize:
break;
default:
break;
}
//throw new NotImplementedException();
}
public override System.IO.Stream ChainStream(System.IO.Stream stream)
{
_requestStream = stream;
_responseStream = new MemoryStream();
return _responseStream;
}
private void CopyStream(Stream requestStream, Stream responseStream)
{

TextReader reader = new StreamReader(requestStream);
TextWriter writer = new StreamWriter(responseStream);
writer.WriteLine(reader.ReadToEnd());
writer.Flush();
}

public XmlDocument SetContentToXml(Stream stream)
{
XmlDocument xml = new XmlDocument();
stream.Position = 0;
StreamReader reader = new StreamReader(stream);
xml.LoadXml(reader.ReadToEnd());
stream.Position = 0;
return xml;

}
public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
{
return null;
}

public override object GetInitializer(Type serviceType)
{
return null;
}
public override void Initialize(object initializer)
{
//throw new NotImplementedException();
}
}

在webconfig文件中添加:

<webServices>
<soapExtensionTypes>
<add type="WebService.MsgSoapExtension,WebService" priority="1" group="High"/>
</soapExtensionTypes>
</webServices>

這樣就能實現攔截可以獲取到webservice 相關信息,我這邊通過將流寫入到xml然后再讀取xml獲取到自己想要的信息,實現webservice 的訪問日志功能

圖中:WebService為類MsgSoapExtension所在的程序集名稱。本人之前在做的時候因為對這個不懂,在這個問題上花費了好多時間,所以在這說明一下,幫助大家理解學習


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM