2011-06-02 232 views
35

我有2個解決方案: - 服務器解決方案 - 客戶端解決方案WCF - 檢查發送/接收的消息?

服務器本身註冊到我的本地IIS:從本地主機應用http://localhost/MyApp/

客戶端增加了WCF服務(服務引用):http://localhost/MyApp/MyService.svc

當我運行客戶端時,我希望能夠看到來回傳遞的消息。我下載了Fiddler,但它似乎並不想讓我看到任何流量被髮送,除非我真的使用網絡瀏覽器。我使用Fiddler錯誤還是有另一個工具,我應該使用這個?


爲了澄清,我在尋找什麼做的是看到正在傳遞的實際消息。我不想與他們做任何東西,除了看他們在視覺上我自己的眼睛。

我喜歡WCF服務日誌實用程序,但我不認爲我在那裏有正確的設置。我看不到實際的肥皂信息,只是收到了一條信息。

而且爲了進一步闡明,我不在乎使用什麼工具,只要我可以輕鬆地看到自己的消息。

回答

13

也許我錯過了一些東西,但... 爲什麼不使用WCF跟蹤功能?這是一個絕妙的故障排除工具。我用它也用於IIS/WAS託管的服務。

Enabling WCF Tracing

順便說一句,有些人不知道,但你可以在同一時間打開來自服務器端和客戶端的痕跡,而觀衆會告訴你在服務器和客戶端的行爲之間的相關性一個不錯的圖表。

編輯:每當我不得不捕獲TCP/IP流量,我使用WireShark。如果您需要以編程方式執行此操作,則可以使用SharpPCAP,以便我可以對從網絡捕獲的內容採取操作。但是對於故障排除,依賴WCF Tracing要好得多。

+1

+1這是一個解決跟蹤問題,而不是代碼。 – 2011-06-02 14:34:29

+1

@德魯馬什:這是不可能的,海事組織,因爲我們不確切知道邁克爾希望看到這些信息的目的。看到它們用於追蹤目的是另一回事,因爲您想要對它們進行修改或執行其他類型的通知。 – casperOne 2011-06-02 14:37:53

+0

@casperOne OP正在嘗試使用Fiddler來查看它們,所以我認爲它非常清楚它們是用於診斷目的。 – 2011-06-02 14:46:15

0

看看這個StackOverflow的線程:How to use Fiddler to monitor WCF service

它回答大家的一些問題。你也可以使用類似WireShark的東西,如果你想檢查網絡上的所有東西,而不是像Fiddler那樣設置代理服務器。

1

您的服務是SOAP還是RESTful?您可以使用WCF Service Trace Viewer Tool查看SOAP消息標題和正文。有關配置您的Web服務以進行跟蹤的說明是here

+0

我試圖看到傳遞到我的服務器的SOAP消息。 – michael 2011-06-02 15:43:08

+0

@michael,你可以使用WCF跟蹤查看器。我用更好的說明更新了鏈接。您需要測試web.config以在您的SOAP服務中啓用跟蹤。使用該工具,您將看到所有請求消息都觸及該服務。 – retrodrone 2011-06-02 15:55:32

+2

@retrodone:說明仍然指向相同的網址(實際上,它們是相同的鏈接)。我做了這些鏈接中所說的,並且我得到了Trace.svcLog文件,但是即使將switchValue設置爲All,我也沒有看到實際的消息。我看到一條消息進來了,但是我沒有看到我能在xml格式中看到* actual * soap消息本身的位置。 – michael 2011-06-03 19:19:11

5

如果你想檢查郵件的編程,你可以implementIClientMessageInspector interface並註冊它與客戶端。

無論您使用的是什麼綁定,這都允許您訪問所有消息,而using tools like Fiddler只允許您使用HTTP傳輸通道檢查消息。

請注意,使用這種技術,您可以做很多實際修改消息或做更多事情(例如,關閉通知)。如果你想要做的只是把你的眼睛放在消息上,那麼using tracing對你來說可能更容易。

+5

IClientMessageInspector不捕獲最終輸出。我依靠這種方法來查看我的傳出消息,並且它沒有捕獲安全頭。因爲這個,我浪費了幾天時間。我認爲頭不在那裏,但我最終指出我的客戶端在一個ASMX Web服務服務器上,它具有良好的老式消息日誌功能,在WCF之前真正起作用,並且我看到我的頭文件實際上在那裏。 – JohnOpincar 2012-05-22 14:15:54

36

要查看消息內容,您必須在配置文件中添加System.ServiceModel.MessageLogging的源代碼。跟蹤查看器中的消息選項卡將顯示特定服務調用的完整消息。

下面是一個示例配置文件:

<configuration> 

... 

    <system.diagnostics> 
     <sources> 
     <source name="System.ServiceModel" 
         switchValue="All" 
         propagateActivity="true"> 
      <listeners> 
       <add name="traceListener" /> 
      </listeners> 
     </source> 
     <source name="System.ServiceModel.MessageLogging" 
         switchValue="All"> 
      <listeners> 
       <add name="traceListener" /> 
      </listeners> 
     </source> 
     </sources> 
     <sharedListeners> 
     <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="c:\Traces.svclog" /> 
     </sharedListeners> 
    </system.diagnostics> 

    <system.serviceModel> 
    <diagnostics> 
     <messageLogging logEntireMessage="true" 
            logMalformedMessages="true" 
            logMessagesAtServiceLevel="true" 
            logMessagesAtTransportLevel="true" 
            maxMessagesToLog="500"/> 
    </diagnostics> 

... 

</system.serviceModel> 

... 

</configuration> 

參閱MSDN上的配置跟蹤主題的更多信息。 http://msdn.microsoft.com/en-us/library/ms733025.aspx

+12

我不得不從'System.ServiceModel.MessageLogging'中刪除'propagateActivity =「true」',然後這個工作對我來說 – Zane 2012-10-03 10:11:41

+0

這個解決方案對我來說(和Zane的註釋一樣),其中我發現的其他解決方案並不完整。 – 2013-09-19 13:15:22

+0

如果您確認'propagateActivity =「true」'應該被移除,爲什麼不修復答案?謝謝。 – Rbjz 2014-03-22 12:16:01