2013-07-02 62 views
5

當嘗試一個小的FileStream傳遞給我WCF服務我得到「超時不支持此流」的錯誤。任何人都可以看到我做錯了什麼?傳遞一個FileStream到WCF拋出「超時不支持此流」異常

接口:

[OperationContract] 
List<SystemClass> ReadExcelFile(System.IO.FileStream stream); 

的Web.Config

<bindings> 
    <basicHttpBinding> 
    <binding name="streaming" maxReceivedMessageSize="2147483647" transferMode="Streamed"> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

<services> 
    <service name="MISDashboard.wcfService" behaviorConfiguration=""> 
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="streaming" contract="MISDashboard.wcfService"></endpoint> 
    </service> 
</services> 
... 
<httpRuntime maxRequestLength="2147483647"/> 

回答

5

不要使用FileStream作爲參數,但Stream。 A FileStream是綁定到本地文件系統的流;一旦你開始傳輸數據,在另一端流將來自網絡,因此不能在那裏使用FileStream。

你能相信這是很相同的,但Stream以一種特殊的方式通過WCF處理,繞過許多內部任務。

此外,發送大型數據考慮閱讀this great article

0

我想在這裏的問題是關於ReadTimeOut和WriteTimeOut性能。 WCF必須試圖設置它們,因爲它們不是在FileStream類中實現的,它會拋出異常。因此,如果將方法參數類型定義爲流WCF應創建數據流所需的適當流。我會猜測NetworkStream。