我想开始我应该问Streaming WCF是否可以在没有MTOM的情况下运行,或者是否需要MTOM?我使用的是MTOM,但它不适用于我们基于Mono的macOS客户端,因此我们不得不将其关闭。
我们在IIS上托管了一个WCF Web应用程序。
这是客户端上的绑定:
<binding name="BasicHttpBinding_IDataService" transferMode="Streamed"
sendTimeout="01:05:00" maxReceivedMessageSize="504857600">
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
</security>
</binding>
这是服务器上的绑定:
<binding name="BasicHttpBinding_IDataService" transferMode="Streamed" sendTimeout="01:05:00" maxReceivedMessageSize="130000000">
<readerQuotas maxArrayLength="104857600" maxStringContentLength="104857600" />
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
</security>
</binding>
我在客户端上调用了一个名为ReceiveAsync的方法。它返回一个流对象。然后我调用流对象来下载数据。
我遇到的问题是,在返回整个文件之前,似乎没有返回对ReceiveAsync的调用,这似乎更像是缓冲而不是流式传输。
如果它在足够慢的网络连接上运行,它会在被叫到ReceiveAsync上超时。
为什么ReceiveAsync不立即返回然后允许我传输文件数据?
答案 0 :(得分:0)
原来,Visual Studio 2017中包含的.net 4.5.2实现似乎不支持流模式。
我最终为大文件添加了REST下载,这对我有用。