Я пытаюсь отправить сообщение 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 и сообщает мне, что формат не поддерживается.