我几天来一直在尝试通过服务引用(我知道如何使用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) 在(包装程序远程调用)