【发布时间】:2023-03-23 14:16:02
【问题描述】:
我正在运行一个通过自定义绑定接受 SOAP 消息的 Web 服务。
消息被正确发送,并且大部分都得到了很好的处理。在处理消息时,正在使用以下命令将消息读取到 XmlDocument:
XmlDocument doc = new XmlDocument();
try {
doc.Load(msg.GetReaderAtBodyContents());
} catch (XmlException x) {
e = x;
} catch (IOException x) {
e = x;
}
但是,当服务负载增加时(可能是线程问题?无法想象,因为在我的自定义传输通道使用 WebMessageEncoder 创建消息后,无法在其他任何地方访问消息),尽管输入消息没问题。
文件意外结束。下列的 元素未闭合:A、B、Body、 信封。第 28 行,位置 9。
由于我在这一行的代码中放置了一个断点,我可以查看 msg.ToString() 的当前值,它为我提供了一个 XML 文件,该文件在 http://www.validome.org/xml/validate/ 这样的验证器中验证良好
请注意,调用 msg.ToString() 并不总是必须正常工作,因为主体也可能是流形式,只能在 msg.GetReaderAtBodyContents() 处使用阅读器读取一次。
这种奇怪行为的原因似乎在于我的自定义绑定,因为它在使用 WebHttpBinding 处理超过 25000 个请求时运行良好。
在我的传输通道中,我在将消息从输入源提取到 byte[] 正文后使用此代码。
Message message = encoder.ReadMessage(
new ArraySegment<byte>(body, 0, contentLength), bufferManager, contentType);
之后会应用标头,然后将消息直接放入 RequestContext 的 RequestMessage 属性中。错误中一定有我忘记的东西。但是什么?
【问题讨论】:
标签: xml wcf wcf-binding