【发布时间】:2016-01-27 15:04:43
【问题描述】:
我正在尝试通过 WCF 向 IRS 发送 SOAP 消息,但由于我的 MTOM 附件格式不正确,它一直被拒绝。
我已将问题范围缩小到我的 Content-Transfer-Encoding 值。它设置为Binary(8-bit 的简写)。
IRS 服务希望我使用带有 8 位编码附件的 7-bit(换句话说,使用 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 并告诉我该格式不受支持。
【问题讨论】:
-
经过更多研究后,我认为 8 位编码问题比 MTOM 尝试对 WSS 安全标头进行编码(这会导致证书优化为MTOM 附件)。这是由 WCF 完成的,我无法控制,所以我正在考虑编写一个自定义消息编码器来克服它。希望这里有人可以给我一个更好的答案,如果它存在的话,在我走得太远之前:)