[英]Capture Raw XML from ASMX Webservice (client)
我有一個C#Winforms程序,該程序需要使用ASMX Web服務,因此需要從SOAP XML捕獲請求/響應XML並將其存儲到數據庫中。
我讀了很多文章,建議使用SoapExtension來捕獲XML,但據我所知,所有解決方案都不是線程安全的,它只是獲取最后捕獲的XML並假設它是一個。 。
例如下面的鏈接:
要查看SOAP信封,只需在發布請求后立即訪問TraceExtension.XmlRequest和TraceExtension.XmlResponse XmlDocument屬性。
我的程序期望有很多並發進程在運行,如果流量很少,上述解決方案肯定會起作用,但是我的客戶希望有一個更體面的解決方案來消除所有風險。
有什么建議嗎?
如果您遵循.Net Windows Form Client中的建議。 從ASMX webservice捕獲請求/響應SOAP ,但是將使用者配置為使用“服務引用”而不是“ Web引用”,則可以在app.config
使用WCF跟蹤:
<system.diagnostics>
<!-- add global listener: http://msdn.microsoft.com/en-us/library/b0ectfxd(v=vs.100).aspx -->
<trace autoflush="true">
<listeners>
<add name="nlog" /> <!-- or whatever you registered in sharedListeners -->
</listeners>
</trace>
<!-- nlog trace listeners: http://nlog-project.org/2010/09/02/routing-system-diagnostics-trace-and-system-diagnostics-tracesource-logs-through-nlog.html -->
<sharedListeners>
<add name="nlog" type="NLog.NLogTraceListener, NLog" />
<add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener"
initializeData="trace.log"/>
</sharedListeners>
<!-- add SOAP listener: https://stackoverflow.com/questions/300674/getting-raw-soap-data-from-a-web-reference-client-running-in-asp-net -->
<sources>
<source name="System.Net" tracemode="protocolonly" maxdatasize="512000" switchValue="All">
<listeners>
<add name="nlog"/>
</listeners>
</source>
<!-- the others, like `System.Net.Sockets` and `System.ServiceModel` don't seem to do much -->
</sources>
</system.diagnostics>
如您所說,鏈接到的示例不起作用,因為它公開了靜態xmlrequest和xmlresponse字段,可以在記錄它們之前對其進行修改。 但是,該示例確實演示了如何編寫自己的SoapExtension(可能名為AuditSoapExtension或PersistSoapExtension),將這些信息保存到ProcessMessage方法中的數據庫中。
請注意,這對於每個請求來說都是很大的開銷,如果您的負載將如您所建議的那樣高,則可以考慮將持久性排隊或批處理到實際數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.