Visual Studio Mac Streaming BasicHttpBinding无法正常工作

时间:2018-02-21 16:55:55

标签: stream mono xamarin.mac basichttpbinding

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

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

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

我通过在创建频道后在代码中更改它来解决这个问题。这是我用来做的代码。也许这就是问题所在:

    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;
    }

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

当进行下载方法调用时,我能够在调试器中看到绑定上的传输模式是Streaming,在它被缓冲之前的位置。

我现在遇到的问题是,即使传输模式是Streamed,下载WCF方法调用也不会返回,直到整个文件被下载。它表现得像仍然处于缓冲模式。

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

看起来流设置在我们正在使用的.net 4.5.2的Xamarin实现中不起作用。不确定它是否适用于以后的版本。

我最后添加了一个REST api,仅用于下载大文件......