使用MTOM和Content-Transfer-Encoding通过WCF发送SOAP消息:7位

时间:2016-01-27 15:04:44

标签: wcf soap mtom 7-bit irs

我正在尝试通过WCF向SOAP发送SOAP消息,并且由于我的MTOM附件格式不正确而不断被拒绝。

我已将问题缩小到我的Content-Transfer-Encoding值。它设置为Binary8-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并告诉我格式不受支持。

2 个答案:

答案 0 :(得分:1)

我正在使用Java Apache CXF和WSS4J作为IRS解决方案,但如果您收到此错误“消息格式不正确和/或无法解释。请查看AIR提交的第3节中概述的XML标准位于https://www.irs.gov/for-Tax-Pros/Software-Developers/Information-Returns/Affordable-Care-Act-Information-Return-AIR-Program的作文和参考指南,更正任何问题,然后重试。“这是因为美国国税局期待这个:

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" 

答案 1 :(得分:1)

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