2013-07-02 38 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。