2010-11-10 166 views
0

我正嘗試使用流上傳大文件將文件上傳到我的WCF服務。所有這些工作正常使用普通客戶端(如ASP.net頁面)。然而,在Silverlight中出現以下錯誤: 此流上不支持超時從Silverlight客戶端上載WCF文件

我通過memorystream上傳,我假設問題基本上是因爲不是在Silverlight中調用同步方法,而是強制調用異步方法。所以這就是不喜歡正常的記憶流。我試圖找到一些其他的流來使用,但它似乎不是Silverlight(緩衝流,網絡流)支持它們,或者破壞了這個方法(因爲某種原因必須是所用方法的唯一參數的通用流)。我在這裏錯過了什麼嗎?我原來使用的是一個字節數組,但是那裏有太多的大小限制,我需要允許上傳。

我可以在這裏插入我的代碼,但因爲一切正常工作與我的ASP.net測試客戶端我假設我的綁定和代碼都很好。

+0

您是否在「塊」中上傳了數據? – 2010-11-10 20:53:51

+0

不,我只是調用接受內存流並將流作爲參數傳遞給它的服務的方法。 – Mark 2010-11-10 20:59:54

回答

0

這裏有三個獨立的問題:

1)你能在你的合同使用的流類型?

2)你能在客戶端上獲得真正的流媒體行爲嗎? (例如,上傳2GB文件時不在堆棧中的任何位置分配2GB內存 - 包括底層HTTP堆棧)

3)您能在服務器上獲得真正的流式傳輸行爲嗎?

據我記得,#1和#2的答案在Silverlight中是「否」(儘管它在SL4.0中可能已經改變)。所以你能達到的最好是#3。例如,你可以嘗試在Silverlight端創建一個基於字節[]的契約,從而得到與服務器端基於流的契約相同的XML投影。或者,在客戶端使用byte []並直接在服務器端從Message類讀取。

但是我對#1 /#2的回憶可能是錯誤的......