這是我上週正在調查的問題,找不到任何解決方法。找到相同的帖子,但從來沒有得到答案,希望這也會幫助其他人。如何從WCF服務中止流而不讀取結束?
我有一個WCF
服務返回含有stream
內它的對象。我使用basicHttpBinding
與流傳輸和Mtom發送到客戶端。
客戶端調用WCF
服務和接收響應對象後立即關閉代理。
接下來,客戶端讀取它從WCF服務得到了流,並將其寫入到本地磁盤上的文件。所有這些工作正常。
我的問題是當客戶端想中止操作並停止從WCF服務下載數據。 如果我在流上調用.close()
,例如:serverReply.DataStream.Close();
,則它會阻止並從WCF服務讀取整個流直到其結束,然後繼續。流可能非常大,網絡並不總是很快。
這對於網絡資源的使用都是非常不希望的,基本上浪費在沒有用處的數據上。而且由於basicHttpBinding
只允許兩個併發的TCP連接(默認情況下)到WCF服務服務器,所以它會阻止其他連接嘗試,直到流被讀取直到其結束。
我可以增加併發連接數,但是這將是一個壞的解決方案,因爲它會造成麻煩的開口。
例如,20次中止下載,仍在下載數據將其丟棄。我需要完全停止轉移。
在客戶端,流對象只是一個普通的Stream
類,所以它只有close方法,沒有別的。
在代理對象上調用.close()
或.abort()
沒有幫助,也不會使用.dispose()
或任何其他方法銷燬它。 在服務器端,我處理OperationContext.OperationCompleted
事件,但直到從stream
的數據被讀取到結束時纔會觸發它。
所以問題是,如何關閉/中止流沒有完全讀取它?
這是什麼運氣? – Schultz9999 2013-02-05 18:59:56
發送真正大文件時遇到同樣的問題...似乎必須錯過一些非常明顯的東西。我可能將不得不實施分塊作爲解決方法。 – 2013-02-14 14:23:12