2010-05-25 148 views
3

雖然我正在向WCF調用SOAP或REST調用,但我希望在任一端(客戶端和服務器)上都有通道堆棧記錄線上收到的數據大小。所以我猜我需要在通道堆棧的任何一邊添加一個自定義行爲。也就是說,在服務器端,我會記錄收到的IP頭廣告大小(累計,直到接收到該消息的所有數據包)。在客戶端,我會記錄從服務器返回的IP頭廣告大小(相同的求和過程)。WCF中的消息大小「在線」WCF中的消息大小

但是,這預設爲這個信息對於通道堆棧級別的自定義WCF行爲是可見的。也許它只能在ASP.NET的層次上(WCF下的一層)顯示?或者,也許WCF已經收集了這個「總郵件大小」信息,我可以簡單地訪問一個屬性?

總之,沒有人有任何進一步的洞察信息是否以及如何訪問?作爲常規業務邏輯調用的一部分,我必須證明這個「規模」數據將在生產環境中收集。因此我對solutions proposed elsewhere不感興趣。

此問題與我之前的bandwidth question有關。

+0

我不確定您可以使用WCF輕鬆訪問傳輸協議(TCP)。但是,收集實際的有效載荷大小應該相當容易。那是你的追求? – Strelok 2010-05-26 02:13:41

+0

我會解決有效載荷的大小,如果這是我能得到的(我可能會添加估計的線上開銷大小,以包括數據包大小的其餘部分)。 – 2010-05-26 02:30:45

回答

1

我認爲唯一可以獲得此信息(或儘可能接近它)的地方是自定義MessageEncoder,它包裝了一個系統提供的信息並記錄了這些信息。我認爲,這樣做不會很困難,但是如果您需要使用自定義綁定,我認爲(或者可能有一種方法將其與一種行爲,不確定)。

值得指出的是,這仍然會遺漏一些像HTTP頭等線上數據,並且這些數據是由傳輸器發送的,但實際上並不是消息本身的一部分。

8

如果set up WCF tracing and message logging,您可以檢查與WCF Service Trace Viewer的svclog文件,並找到該消息日誌中的HTTP請求內容長度:

alt text http://i50.tinypic.com/xfna06.png

+0

由於我將嘗試在生產環境中捕獲此信息,因此我將無法打開跟蹤功能。但是,如果我可以從我添加的自定義行爲中收集相同的「Content-Length」,那麼這可能就是我需要的。 – 2010-05-26 17:01:19

+2

這隻適用於使用HTTP綁定的情況。 – markmnl 2014-03-28 07:57:18

0

我用Fiddler得到的消息大小。這似乎是最不顯眼的方式,因爲它不需要更改您的應用或配置。

只需運行該工具,使請求和讀統計接收的字節

你可能必須做的,如果它的編碼解碼是郵件正文唯一的其他東西。當檢查請求時,會有一條消息響應主體被編碼。點擊解碼。要做到這一點。