使用连接到WCF服务的服务参考时,如何在.Net中启用http自动解压缩?

时间:2018-06-25 21:07:00

标签: .net wcf xamarin xamarin.android gzip

我几天来一直在尝试通过服务引用(我知道如何使用Web进行引用)引用WCF服务时如何在.net项目(Xamarin解决方案的一部分)中启用自动解压缩功能。参考,但这限制了其他功能,因为它是较老的技术。

我设法将标头手动添加到客户端调用中,以便服务器将使用压缩数据进行响应:

 using (new System.ServiceModel.OperationContextScope(ServiceRef.Connection.InnerChannel))
{
    HttpRequestMessageProperty reqProps = new HttpRequestMessageProperty();
    reqProps.Headers["Accept-Encoding"] = "gzip,deflate";
    System.ServiceModel.OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = reqProps;

    data = ServiceRef.Connection.GetData(inputParam);

}

但是,由于这没有使用HttpWebClientProtocol或HttpWebRequest的EnableDecompression或AutomaticDecompression属性,因此客户端不会解压缩接收到的数据。
通过添加服务引用生成的WCF代理类似乎无法在我能找到的任何地方设置解压缩布尔值。

我应该注意,我们正在使用BasicHttpBinding,不能将其更改为WCF服务的任何其他绑定。

我在这里做错了什么吗?还是我缺少一些简单的东西?

编辑: 我添加了一个我得到的错误,它清楚地表明数据正在压缩并且不会自动解压缩(显然应该这样做,因为.Net WCF客户端应该在版本大于4.0时才自动解压缩,因此该项目正在使用.NET 4.6)。

System.Xml.XmlException:''(十六进制值0x1F)是无效字符。第1行,位置1。   在(包装器托管到本机)System.Object .__ icall_wrapper_mono_remoting_wrapper(intptr,intptr)   在(包装程序远程调用)

0 个答案:

没有答案