我有一个可在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方法调用也不会返回,直到整个文件被下载。它表现得像仍然处于缓冲模式。
任何想法如何解决这个问题?
答案 0 :(得分:0)
看起来流设置在我们正在使用的.net 4.5.2的Xamarin实现中不起作用。不确定它是否适用于以后的版本。
我最后添加了一个REST api,仅用于下载大文件......