有沒有辦法將傳入的請求記錄到WCF服務?記錄WCF服務收到的請求
我有一個簡單的WCF服務託管爲Windows服務。 WCF服務每天寫入日誌。 有些時候會出現不良請求,我也想記錄。
有沒有辦法記錄進入的SOAP請求? 這樣可以幫助向客戶展示他們正在犯的錯誤。
問候。
有沒有辦法將傳入的請求記錄到WCF服務?記錄WCF服務收到的請求
我有一個簡單的WCF服務託管爲Windows服務。 WCF服務每天寫入日誌。 有些時候會出現不良請求,我也想記錄。
有沒有辦法記錄進入的SOAP請求? 這樣可以幫助向客戶展示他們正在犯的錯誤。
問候。
您可以嘗試執行IServiceBehavior
和IParameterInspector
類,該類將處理日誌記錄。
IServiceBehavior接口
的ApplyDispatchBehavior
是最重要的方法來實現:
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)
{
foreach (var endpoint in dispatcher.Endpoints)
{
foreach (var dispatchOperation in endpoint.DispatchRuntime.Operations)
{
dispatchOperation.ParameterInspectors.Add(new LoggingParameterInspector(/*reference to your logger*/));
}
}
}
}
你,無論是通過使您的服務實現類Attribute
,或者通過應用此ServiceBehavior
爲您服務在啓動時將其添加到定義中。
IParameterInspector
這個接口有兩個方法:BeforeCall
和AfterCall
。在這些方法的實現中,您可以訪問操作名稱和給定方法的輸入。這使您可以創建對服務的所有呼叫的乾淨和簡單的跟蹤。
儘管我不確定如何準確記錄SOAP消息的內容,但此方法可爲您提供大量額外信息,特別是如果您實施定時記錄。
您可以在服務的配置文件中配置跟蹤和跟蹤級別。要查看日誌文件,Microsoft提供了一個特殊的跟蹤日誌查看器。通常情況下,您只需雙擊跟蹤文件即可在此查看器中打開它們。
這一問題已經在SO回答了很多次,例如How to turn on WCF tracing?
文檔在MSDN上 http://msdn.microsoft.com/en-us/library/ms733025.aspx
示例配置
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true" >
<listeners>
<add name="xml"/>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml"/>
</listeners>
</source>
<source name="myUserTraceSource"
switchValue="Information, ActivityTracing">
<listeners>
<add name="xml"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="Error.svclog" />
</sharedListeners>
</system.diagnostics>
</configuration>
我想添加到自@RoelF的迴應他在下面提到
儘管我不確定如何準確記錄SOAP 消息的內容,但此方法可爲您提供大量額外信息,特別是如果您實施定時記錄。
所以這裏是你用來從那些AfterCall BeforeCall方法獲得SOAP請求的線。
Message message = OperationContext.Current.RequestContext.RequestMessage;
然後你可以記錄message.ToString()。這應該記錄您之後的SOAP請求。