使用 MTOM 和内容传输编码通过 WCF 发送 SOAP 消息:7 位

Send SOAP messages via WCF with MTOM and Content-Transfer-Encoding: 7-bit

我正在尝试通过 WCF 向 IRS 发送 SOAP 消息,但它一直被拒绝,因为我的 MTOM 附件格式不正确。

我已将问题缩小到我的 Content-Transfer-Encoding 值。它设置为 Binary(shorthand 代表 8-bit)。

IRS 服务要我使用 7-bit,带有 8 位编码的附件(换句话说,用 UTF-8 编码,然后保证我没有使用任何非 ASCII 字符).

我已经在使用自定义消息编码器来 gzip 我的请求(响应返回纯文本,呃)。这就是我的 WriteMessage 现在的样子。

public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset) {
    // get an instance of the underlying encoder
    var encoder = new MtomMessageEncodingBindingElement() {
            MessageVersion = MessageVersion.Soap11WSAddressing10,
            WriteEncoding = System.Text.Encoding.UTF8
        }.CreateMessageEncoderFactory().Encoder;

    // write the message contents
    var uncompressed = encoder.WriteMessage(message, maxMessageSize, bufferManager, messageOffset);

    // compresses the resulting byte array
    return CompressBuffer(uncompressed, bufferManager, messageOffset);
}

有什么想法吗?当我将 WriteEncoding 属性 更改为 ASCII 或 UTF7 时,.NET 抛出 ArgumentException 并告诉我格式不受支持。

我正在使用 Java Apache CXF 和 WSS4J 作为 IRS 解决方案,但如果您遇到此错误 "The message was not formatted properly and/or cannot be interpreted. Please review the XML standards outlined in Section 3 of the AIR Submission Composition and Reference Guide located at https://www.irs.gov/for-Tax-Pros/Software-Developers/Information-Returns/Affordable-Care-Act-Information-Return-AIR-Program, correct any issues, and try again." 那是因为 IRS 期望这样:

Content-Type: application/xml
Content-Transfer-Encoding: 7bit
Content-ID: <6920edd2-a3c7-463b-b336-323a422041d4-1@blahurn:us:gov:treasury:irs:common>
Content-Disposition: attachment;name="1094B_Request_BBBBB_20151019T121002000Z.xml" 

WCF 中的内置 MTOM 编码器似乎不会对与 IRS 服务兼容的请求进行编码。它对它在请求中找到的任何内容进行编码,这些请求是 base64 编码的,包括签名请求中的 BinarySecurityToken。通过创建自定义编码器,我能够获得更接近 IRS 要求的请求。在 WriteMessage 中,您可以附加和前置 MIME 分隔符并将文件重新编码为附件。需要外发消息检查器才能正确设置 headers:https://blogs.msdn.microsoft.com/carlosfigueira/2011/04/18/wcf-extensibility-message-inspectors/