首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用客户端web服务时获取内容错误

在使用客户端web服务时获取内容错误
EN

Stack Overflow用户
提问于 2016-02-01 07:44:49
回答 2查看 1.1K关注 0票数 1

当我使用客户端web服务时,我会收到以下错误。

错误:内容类型text/xml;响应消息的charset=utf-8不匹配绑定的内容类型(application/soap+msbin1 1+gzip)。如果使用自定义编码器,请确保正确地实现了IsContentTypeSupported方法。 响应的前807字节是: ‘soapenv:客户端请求消息必须使用HTTP压缩(RFC 1952-GZIP)发送。请查看位于https://www.irs.gov/for-Tax-Pros/Software-Developers/Information-Returns/Affordable-Care-Act-Information-Return-AIR-Program的空气提交组成和参考指南第5节中概述的传输说明,纠正任何问题,然后再试一次。TPE1112 '.==========================Error: System.Net.WebException:远程服务器返回一个错误:(500)内部服务器错误。在System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan超时时在System.Net.HttpWebRequest.GetResponse() )

我知道有很多关于这个错误的文章,但是我无法得到解决方案或提示,如何解决这个问题?

基本上,客户端提供了WSDL文件,我将其作为“服务引用”添加到控制台应用程序中。

这是我的配置文件

代码语言:javascript
复制
<bindings>
  <customBinding>
    <binding name="BulkRequestTransmitterBinding"  >
      <binaryMessageEncoding compressionFormat="GZip" />
      <httpsTransport/>
    </binding>
  </customBinding>
</bindings>
<client>
  <endpoint address="MYENDPOINTURL"
      binding="customBinding" 
      bindingConfiguration="BulkRequestTransmitterBinding"
      contract="CONTRACTNAME" 
      name="BulkRequestTransmitterPort" />
</client>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-11 16:26:09

要开始工作,您需要下载此示例编码器来自Microsoft。

设置它并将其作为一个项目添加到解决方案中。之后你需要做些调整。

  1. 首先,您需要将内容类型更改为“text/xml”,而不是“application/x”。通过改变 类GZipMessageEncoder : MessageEncoder {静态字符串GZipContentType =“application/x”; 至 静态字符串GZipContentType = "text/xml";
  2. 在发送之前,您还需要更改内容编码头,这篇博文更详细地描述了它。,但是代码如下: 使用(new OperationContextScope(transmitter.InnerChannel)) { //将HTTP报头添加到传出请求HttpRequestMessageProperty requestMessage =新HttpRequestMessageProperty();requestMessage.Headers“内容-编码”= "gzip";OperationContext.Current.OutgoingMessagePropertiesHttpRequestMessageProperty.Name = requestMessage;var response = transmitter.BulkRequestTransmitter( securityHeader,security,ref businessHeader,transmitterManifestReqDtl,transmitterType);ParseSubmitResponse(响应)};
  3. IRS在要求您发送压缩的所有内容的同时,以未压缩的格式响应(至少对发射机部分,谁知道他们决定对状态部分做什么),因此需要禁用解压缩例程,它位于 ZipEncoder.CZipMessageEncoderFactory.GZipMessageEncoder.DecompressBuffer 您只需要注释掉using语句和交换 int bytesRead = gzStream.Read(tempBuffer,0,blockSize); 使用 int bytesRead = memoryStream.Read(tempBuffer,0,blockSize);
  4. 接下来,您需要更改内部消息编码消息版本,使其与IRS兼容。所以在 GZipEncoder.GZipMessageEncodingElement.ApplyConfiguration 您需要将TextMessageEncodingBindingElement的构造函数更改为: (新TextMessageEncodingBindingElement(MessageVersion.Soap11WSAddressing10,Encoding.UTF8);
  5. 这样,您几乎已经准备好了,您只需要向app.config添加一些东西--您需要添加以下部分(服务模型是用于参考哪个部分的标记):
  6. 现在,您可以使您的绑定看起来如下:

这样,您的代码应该可以成功地传输到国税局。

票数 3
EN

Stack Overflow用户

发布于 2016-02-11 19:46:14

我和你们处于同一条船上,对于不能简单地发表评论,我和你们处于同一条船上。关于向国税局传送的很好的解释。似乎有几个人在这个网站上为我们各自的实体做同样的工作。

但是,我遇到了以下错误,在确定解决该错误的下一步时遇到了问题。当将BulkRequestTransmitterPortTypeClient实例化到新对象时,我将收到此错误,以便我可以将Content-Encoding添加到标头,并将请求发送到IRS。

'System.Configuration.ConfigurationErrorsException‘类型的未处理异常发生在System.Configuration.dll中 附加信息:无法加载为扩展“GZipEncoder.GzipMessageEncodingElement”注册的“GZipEncoder,gzipMessageEncoding”类型。

  • 我在解决方案中创建了一个新项目,并从编码示例中创建了三个类文件。
  • 我做了你对我的代码所做的修改。
  • 在我的客户端应用程序中添加了此项目作为引用。
  • 在我的客户端应用程序中,gzipMessageEncoding app.config条目是带下划线的,但是从我读过的其他文章来看,这是可以的。
  • 我认为在我的<extensions><bindingElementExtensions>中有适当的<metadata><policyImporters><extension>app.config条目。

答案-编辑

为了克服我遇到的错误,我找到了这个职位,它引导我使用下面的代码输出我需要添加到app.config中的类型字符串。我将这些命令输出的字符串复制到app.config中,这使我通过了上面的错误。

代码语言:javascript
复制
Console.WriteLine(typeof(GZipEncoder.GZipMessageEncodingElement).AssemblyQualifiedName);
Console.WriteLine(typeof(GZipEncoder.GZipMessageEncodingBindingElementImporter).AssemblyQualifiedName);

app.config条目

代码语言:javascript
复制
<system.serviceModel>
  <extensions>
    <bindingElementExtensions>
      <add name="gzipMessageEncoding" type="GZipEncoder.GZipMessageEncodingElement, GZipMessageEncoder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    </bindingElementExtensions>
  </extensions>
  <client>
    <metadata>
      <policyImporters>
        <extension type="GZipEncoder.GZipMessageEncodingBindingElementImporter, GZipMessageEncoder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      </policyImporters>
    </metadata>
  </client>
  <bindings>
    <customBinding>
      <binding name="BulkRequestTransmitterBinding">
        <gzipMessageEncoding innerMessageEncoding="textMessageEncoding" />
        <httpsTransport />
      </binding>
    </customBinding>
  </bindings>
</system.serviceModel>

我仍然收到关于gzipMessageEncoding元素的模式验证警告,但是我看到的很多东西都说过应该是这样的。所以现在,我要忽略它。

请求提交

代码语言:javascript
复制
// Called from the main method.
// 'request' is the BulkRequestTransmitterRequest object where the BusinessHeader, 
// Manifest, Security, and FormData are set.
ACABulkRequestTransmitterResponseType response = SubmitRequest(request).ACABulkRequestTransmitterResponse;

private static BulkRequestTransmitterResponse SubmitRequest(BulkRequestTransmitterRequest request)
{
    // Create a new instance of the Web Service client object.
    BulkRequestTransmitterPortTypeClient client = new BulkRequestTransmitterPortTypeClient("BulkRequestTransmitterPort");

    using (new OperationContextScope(client.InnerChannel))
    {
        // Add a HTTP Header to an outgoing requqest.
        HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty();

        requestMessage.Headers["Content-Encoding"] = "gzip";
                            OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;

        return client.BulkRequestTransmitter(request);
    }
}

接下来是我在TransmitterRequestStatusRequest上接收到的下一个错误

附加信息:消息中的WS安全标头无效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35125290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档