Отправка SOAP-сообщений через WCF с MTOM и Content-Transfer-Encoding: 7-битная

Я пытаюсь отправить сообщение SOAP через WCF в IRS, и оно продолжает отклоняться, потому что мое вложение MTOM отформатировано неправильно.

Я сузил вопрос до моего Content-Transfer-Encoding значение. Это установлено в Binary (сокращение для 8-bit).

Служба IRS хочет, чтобы я использовал 7-bitс 8-битным кодированным вложением (другими словами, кодируйте с помощью UTF-8, а затем гарантируйте, что я не использую никакие не-ASCII символы).

Я уже использую собственный кодировщик сообщений, чтобы сжать мои запросы (ответы возвращаются в виде простого текста, тьфу). Это то, что мой 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 ответа

Решение

Я использую Java Apache CXF и WSS4J для решения IRS, но если вы получаете эту ошибку "Сообщение не было отформатировано должным образом и / или не может быть интерпретировано. Пожалуйста, ознакомьтесь со стандартами XML, изложенными в Разделе 3 Состава и ссылки на отправку AIR Руководство, расположенное по адресу https://www.irs.gov/for-Tax-Pros/Software-Developers/Information-Returns/Affordable-Care-Act-Information-Return-AIR-Program, исправьте все ошибки и попробуйте снова." это потому, что 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" 

Похоже, что встроенный кодировщик MTOM в WCF не будет кодировать запрос, совместимый со службой IRS. Он кодирует все, что находит в запросе, который закодирован в base64, включая BinarySecurityToken в подписанном запросе. Я смог получить запрос ближе к требованиям IRS, создав собственный кодировщик. В WriteMessage вы можете добавлять и добавлять MIME-разделители и перекодировать файл как вложение. Инспектор исходящих сообщений должен правильно установить заголовки: https://blogs.msdn.microsoft.com/carlosfigueira/2011/04/18/wcf-extensibility-message-inspectors/

Другие вопросы по тегам