Visual Studio Mac 流式传输 BasicHttpBinding 不工作

Visual Studio Mac Streaming BasicHttpBinding not working

我有一个 运行 在 Windows 和 Mac 上运行的跨平台应用程序。它在 .NET 4.5.2 上使用 WCF。在设置文件的 BasicHttpBinding 配置中,我设置了 transferMode="Streaming"。我们正在使用此服务下载大文件。

在 Windows 上一切正常。 WCF 方法立即调用 returns,然后当我从 MessageContract 对象的 Stream 成员中读取时,文件被流式传输为异常。

当我 运行 在 Visual Studio 中为 Mac 使用相同的应用程序时,我遇到了 2 个问题。第一个问题是绑定中的传输模式是Buffered而不是Streamed。

我在创建频道后通过更改代码来解决这个问题。这是我用来执行此操作的代码。可能是这个问题:

    private IDataService CreateClient()
    {
        Channel = new ChannelFactory<IDataService>(BindingId);
        var binding = Channel.Endpoint.Binding as BasicHttpBinding;
        binding.TransferMode = TransferMode.Streamed;
        Channel = new ChannelFactory<IDataService> (binding, Channel.Endpoint.Address);
        var client = Channel.CreateChannel();
        return client;
    }

请注意我是如何读取绑定、更改传输模式然后使用新绑定创建新频道的。这似乎是从设置文件中获取相同设置但切换传输模式的最佳方式。

调用下载方法后,我可以在调试器中看到绑定的传输模式是 Streamed,之前是 Buffered。

此时我遇到的问题是,即使传输模式是流式传输,下载 WCF 方法调用也不会 return 直到整个文件下载完毕。它的行为就像它仍处于缓冲模式。

有什么解决办法吗?

我们使用的 .net 4.5.2 的 Xamarin 实现中的流设置似乎不起作用。不确定它是否适用于更高版本。

我最后添加了一个 REST api 只是为了下载大文件...