将FileStream传递给WCF会抛出“此流不支持超时”异常

时间:2013-07-02 21:28:04

标签: wcf filestream

尝试将小型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"/>

2 个答案:

答案 0 :(得分:5)

请勿使用FileStream作为参数,StreamFileStream是绑定到本地文件系统的流;一旦开始传输数据,另一方面流将来自网络,因此不能在那里使用FileStream。

你可以相信它是相同的但是Stream由WCF以特殊方式处理并绕过许多内部任务。

此外,要发送大数据,请考虑阅读this great article

答案 1 :(得分:0)

我想这里的问题是关于ReadTimeOut和WriteTimeOut属性。在引擎盖下,WCF必须尝试设置它们,因为这些没有在FileStream类中实现,它会抛出异常。因此,如果您将方法Argument类型定义为Stream WCF,则应创建数据流所需的相应流。我猜想NetworkStream。