gpt4 book ai didi

c# - WCF 终结点 : Message. WriteMessage 更改 XML 消息内的结束标记

转载 作者:数据小太阳 更新时间:2023-10-29 02:38:11 27 4
gpt4 key购买 nike

我使用自定义端点行为扩展来拦截消息,因为它们是由我的 WCF 服务端点接收的,使用 IDispatchMessageInspector。我像这样检索消息内容:


public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
MessageBuffer messageBuffer = request.CreateBufferedCopy(Int32.MaxValue);
Message message = messageBuffer.CreateMessage();

using (MemoryStream stream = new MemoryStream())
{
using (XmlWriter writer = XmlWriter.Create(stream))
{
message.WriteMessage(writer);
writer.Flush();
stream.Position = 0;
}
}
}

我需要完全按照客户端发送的那样获取 XML 消息,但写入流的 XML 似乎已被 WCF(或 XmlWriter?)修改。我的主要问题是它修改了结束标签:<id />变成 <id></id> XML 消息中无处不在。有没有一种方法可以在不修改端点接收消息内容的情况下写入消息内容(或者至少不改变标签的关闭方式?

最佳答案

我还没有测试过这个,但它可能值得一试。

想法是由 xmlwriter 完成对 xml 的修改。

然后您可以通过执行 message.ToString() 来获取消息的内容。

编辑 如果您将其作为 xml 发送,看起来 WCF 将更改服务器或客户端的 XML。

您可以做的是将 xml 作为字节数组发送,这样 WCF 就不会尝试更改它。

EDIT 2 您提到的自定义消息编码器看起来既可以对消息进行编码也可以对消息进行解码。因此它是否也需要在客户端运行?

关于c# - WCF 终结点 : Message. WriteMessage 更改 XML 消息内的结束标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1079491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com