Отправка 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/