Getting an error for content inconsistency when using a client web service

I get the following error while I use the client web service.

Error: content type text / xml; charset = utf-8 of the response message does not match the content type of the binding (application / soap + msbin1 + gzip). If you use a custom encoder, make sure that the IsContentTypeSupported method is implemented correctly.

The first 807 bytes of the response were:

"soapenv: Client A request message must be sent using HTTP compression (RFC 1952 - GZIP). Read the transfer instructions in Section 5 of the WHO Compilation and Reference Guide located at https://www.irs.gov / for-Tax-Pros / Software-Developers / Information-Returns / Affordable-Care-Act-Information-Return-AIR-Program, fix all problems and try again. TPE1112 '. =================================================== =================================================== =================================================== =================================================== =========== in System.Net.HttpWebRequest.GetResponse () in System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan timeout)

I know that there are many articles about this error, but I can’t get a solution or a hint, how to solve this problem?

Basically, the client provided the WSDL file, and I added it as “Service Links” to the console application.

Here is my configuration file

<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>
+1
2

Microsoft

. .

  • "text/xml" "application/x-gzip".

    class GZipMessageEncoder : MessageEncoder
    {
    static string GZipContentType = "application/x-gzip";
    

    static string GZipContentType = "text/xml";
    
  • , , :

    using (new OperationContextScope(transmitter.InnerChannel))
    {
    // Add a HTTP Header to an outgoing request
    HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty();
    requestMessage.Headers["Content-Encoding"] = "gzip";
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;
    
    var response = transmitter.BulkRequestTransmitter(
        securityHeader,
        security,
        ref businessHeader,
        transmitterManifestReqDtl,
        transmitterType);
    ParseSubmitResponse(response);
    }
    
  • IRS, , , ( , , , ), ,

    ZipEncoder.CZipMessageEncoderFactory.GZipMessageEncoder.DecompressBuffer
    

    using

    int bytesRead = gzStream.Read(tempBuffer, 0, blockSize);
    

    int bytesRead = memoryStream.Read(tempBuffer, 0, blockSize);
    
  • , IRS. ,

    GZipEncoder.GZipMessageEncodingElement.ApplyConfiguration
    

    TextMessageEncodingBindingElement :

    binding.InnerMessageEncodingBindingElement =
        new TextMessageEncodingBindingElement(MessageVersion.Soap11WSAddressing10, Encoding.UTF8);
    
  • , app.config. ( - ):

    <system.serviceModel>
      <extensions>
        <bindingElementExtensions>
          <add name="gzipMessageEncoding" type="GZipEncoder.GZipMessageEncodingElement, GZipEncoder, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" />
        </bindingElementExtensions>
      </extensions>
    
  • :

    <binding name="BulkRequestTransmitterBinding">
      <gzipMessageEncoding innerMessageEncoding="textMessageEncoding" />
      <httpsTransport />
    </binding>
    

IRS.

+3

, , . IRS. , , .

, . BulkRequestTransmitterPortTypeClient , Content-Encoding IRS.

"System.Configuration.ConfigurationErrorsException" System.Configuration.dll

: "GZipEncoder.GzipMessageEncodingElement, GZipEncoder", "gzipMessageEncoding", .

  • .
  • , .
  • .
  • gzipMessageEncoding app.config , , , .
  • , <extensions><bindingElementExtensions> <metadata><policyImporters><extension> app.config.

-Edit
, , , , app.config. , , app.config, .

Console.WriteLine(typeof(GZipEncoder.GZipMessageEncodingElement).AssemblyQualifiedName);
Console.WriteLine(typeof(GZipEncoder.GZipMessageEncodingBindingElementImporter).AssemblyQualifiedName);

app.config

<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, , , , . .

// 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);
    }
}

, TransmitterRequest StatusRequest:

: WS Security .

0

Source: https://habr.com/ru/post/1626656/


All Articles