WCF流式传输时间

时间:2018-02-19 15:19:48

标签: .net wcf streaming

我想开始我应该问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不立即返回然后允许我传输文件数据?

1 个答案:

答案 0 :(得分:0)

原来,Visual Studio 2017中包含的.net 4.5.2实现似乎不支持流模式。

我最终为大文件添加了REST下载,这对我有用。