如何在使用 WSDL 和 WCF 与远程服务通信时启用 GZip 压缩

问题描述

我正在尝试使用 WSDL 文件和 WCF 将数据发送到 irs。我正在使用 .NET 和 Microsoft VS.NET,它们创建了一个我用来进行通信的代理类。

我的问题是我不断收到一条消息,说 irs 需要 GZip 压缩:

必须使用 HTTP 压缩 (RFC 1952 - GZIP) 发送请求消息。请查看位于 https://www.irs.gov/e-file-providers/air/affordable-care-act-information-return-air-program 的出版物 5258,AIR 提交组合和参考指南的第 5 节中概述的传输说明,更正任何问题,然后重试。'

错误消息中提到的发布非常通用,并非特定于 .NET 和 WCF。我做了一些研究,找到了一种在 web.config 中启用 GZip 压缩的方法

<binaryMessageEncoding compressionFormat="GZip" />

但是,我现在收到此错误

响应消息的内容类型 text/xml;charset=utf-8 与绑定的内容类型(application/soap+msbin1+gzip)不匹配。如果使用自定义编码器,请确保正确实现 IsContentTypeSupported 方法

有谁知道我做错了什么?我需要创建自定义编码器吗?这是我的完整 web.config 文件

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.7.2"/>
    <httpRuntime targetFramework="4.7.2"/>
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,Microsoft.CodeDom.Providers.DotNetCompilerPlatform,Version=2.0.1.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /Nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider,PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /Nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="GetACATransmitterStatusReqBinding">
          <security mode="Transport" />
        </binding>
        <binding name="GetACATransmitterStatusReqBinding1" />
      </basicHttpBinding>
      <customBinding>
        <binding name="BulkRequestTransmitterBinding">
          <!--<textMessageEncoding messageVersion="Soap11WSAddressing10" />-->
            <binaryMessageEncoding compressionFormat="GZip" />
            
          <httpsTransport />
        </binding>
      </customBinding>
    </bindings>
    <client>
      <endpoint address="https://la.www4.irs.gov/airp/aca/a2a/1095BC_Transmission_AATS"
        binding="customBinding" bindingConfiguration="BulkRequestTransmitterBinding"
        contract="BulkRequestTransmitterService.BulkRequestTransmitterPortType"
        name="BulkRequestTransmitterPort" />
      <endpoint address="https://la.www4.irs.gov/airp/aca/a2a/1095BC_Status_Request_AATS"
        binding="basicHttpBinding" bindingConfiguration="GetACATransmitterStatusReqBinding"
        contract="ACAGetTransmitterBulkRequestStatus.ACATransmitterStatusReqPortType"
        name="ACATransmitterStatusReqPort" />
    </client>
  </system.serviceModel>
</configuration>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)