GZIP通过WCF将请求压缩到远程Web服务

我正在使用需要与远程Web服务进行通信的Visual Studio 2010编写应用程序。 由于提交的数据量可能很大(最多100MB),因此服务文档说必须使用GZIP HTTP压缩发送请求消息。

我的问题是如何做到这一点,因为我只是在Visual Studio生成的代理对象上调用一个方法,而不是自己实际执行POST? 换句话说,由于我的代码中没有任何“请求”到GZIP,我怎么能告诉WCF为我做这个?

我通过使用提供的WSDL向我的应用程序添加服务引用来连接到服务,然后在Visual Studio生成的代理上调用一个方法来提交请求。 将抛出exception,并显示消息“必须使用HTTP压缩发送请求消息”。 (当然,这并不意外。)

在此处输入图像描述

web.config设置中是否有一个属性定义了WCF服务,该服务会在将请求发送到远程主机之前使WCF对GZIP请求进行GZIP?

注意:我花了很多时间在网上搜索这个,但问题是大多数post都认为这是需要压缩的Web服务的响应 。 然而,在我的情况下,这是从我的客户发送的请求

似乎我已经能够以一种对“我为什么甚至存在”的方式对我没有任何意义的方式来解决这个问题。

首先,我正在处理与您相同的任务:尝试使用代理对象来创建Web请求,最终遇到无法压缩客户端对象的同一问题。

我最终得到的解决方案是手动创建一个XDocument对象(XmlDocument也可以工作),它具有与所需SOAP XML相同的结构,然后使用(已)填充的代理对象在字符串中填充必要的XML值。 SOAP XML。

从那里我创建了一个HttpWebRequest对象,并将相应的头添加到请求中。 其中一个标题是压缩。 执行代码导致获得完全不同的非压缩相关错误。

您可以在此处查看我的HttpWebRequest解决方案: 使用gzip压缩HttpWebRequest

通过这个代理对象做起来并不容易,这似乎很愚蠢。 但是,可能是第三方没有公开为了向请求标题添加属性所必需的内容以及a。)他们不知道或b。)他们不关心,但这就是我们所拥有的不幸的是,与…合作。

我不得不在截止日期前解决问题,但我希望这也可以帮助你。

您是否尝试将添加到 元素? 我认为我们正在处理类似的任务,我也收到了上面的FaultException 。 另外两个SO主题让我不敢问这个问题。 这是有道理的,因为我也没有通过代码创建WebRequest ,而是通过在导入第三方提供的WSDL时创建的服务引用来调用服务。

用于压缩的WCF自定义绑定 (基于代码的方法)

WCF客户端端点压缩 (基于配置的方法)

如果您对上述方法有任何成功,请告诉我。

编辑
以下主题中的答案表明,除非您可以控制Web服务和客户端,否则可能会执行某些操作。

在Visual Studio 2010中使用C#webservice客户端进行压缩

编辑#2
我想有些人已经能够在使用GZip压缩第三方服务请求方面取得进展。 请查看此post: 在使用客户端Web服务时获取内容mismtach的错误 。

该post帮助我摆脱了我收到的错误消息(这告诉我必须使用HTTP压缩进行请求)。 我希望它对你也有帮助。

必须使用HTTP压缩(RFC 1952 – GZIP)发送请求消息。