尝试将小型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"/>
答案 0 :(得分:5)
请勿使用FileStream
作为参数,Stream
。 FileStream
是绑定到本地文件系统的流;一旦开始传输数据,另一方面流将来自网络,因此不能在那里使用FileStream。
你可以相信它是相同的但是Stream
由WCF以特殊方式处理并绕过许多内部任务。
此外,要发送大数据,请考虑阅读this great article。
答案 1 :(得分:0)
我想这里的问题是关于ReadTimeOut和WriteTimeOut属性。在引擎盖下,WCF必须尝试设置它们,因为这些没有在FileStream类中实现,它会抛出异常。因此,如果您将方法Argument类型定义为Stream WCF,则应创建数据流所需的相应流。我猜想NetworkStream。