Я пытаюсь отправить SOAP-сообщение через WCF в IRS, и он продолжает отклоняться, потому что мое приложение MTOM отформатировано неправильно.Отправлять SOAP-сообщения через WCF с помощью MTOM и Content-Transfer-Encoding: 7-bit
Я сузил вопрос до своего значения Content-Transfer-Encoding
. Он установлен в Binary
(стенограмма для 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 и сообщает, что формат не поддерживается.
Я думаю, что 8-битное кодирование является менее проблематичным после нескольких исследований, чем тот факт, что MTOM пытается кодировать заголовок безопасности WSS (который является в результате чего сертификат будет оптимизирован в приложение MTOM). Это делается WCF из-под моего контроля, поэтому я ищу в написании пользовательского кодера сообщений для его преодоления. Надеюсь, кто-то здесь может дать мне лучший ответ, если он существует, прежде чем я заберусь слишком далеко :) – Dave