2010-04-29 16 views
1

在客戶端獲得Web請求的完整有效負載之前,我們首先要發送一個測量它將得到的響應的大小。如果響應過大,客戶端會向用戶顯示一條消息,讓他們選擇中止操作。是否有內置的方式來確定WCF響應的大小?

我們可以編寫一些自定義代碼來預先載入服務器上的響應,確定大小,然後將它傳遞給客戶端,但是如果還有其他方法可以執行,我們寧願不要。

有誰知道如果WCF有任何棘手的方式來做到這一點?或者是否有免費的第三方工具可以實現這一目標?

謝謝。

回答

0

我不認爲在WCF或.NET框架中有什麼「棘手」的問題來做到這一點,真的。你傳遞給客戶的是什麼?一個類的實例?

你可以做的是運行查詢,或者你獲取響應,然後將其序列化到內存流中,看看它有多大。這不會是一個完全準確的大小 - SOAP消息有一些額外的開銷,比如SOAP信封和頭文件等等,但它可以讓你知道你是要返回幾百字節還是一個字節幾兆字節。

問題是:服務器上可能需要一段時間才能進行彙編/查詢,然後再實際「測量」。此外,你幾乎必須有兩個調用 - 一個是「MeasureResult」,它返回一個Int或Long或其他東西,然後第二個調用「GetResult」來實際得到結果。所以你會花費這樣的努力來組裝消息兩次....

我真的沒有一個很好的答案給你,但也許你只需要找出一些其他方式來讓客戶端中止如果時間太長,請致電。或者找到一種方法來更快速地找出一個指標,說明響應的大小(沒有獲得響應本身的所有細節)。

+0

所有的都是很好的建議。我們最終完全避免了這個問題,並且只要數據下載花費了n秒以上,就會在用戶界面上向用戶彈出一條消息。不是最強大的解決方案,但顯然要比編寫一大堆服務器端代碼容易得多,這些代碼會進一步減慢進程速度,並最終提供近似值。 – jaminto 2010-12-10 23:44:23

相關問題