gpt4 book ai didi

c# - 如何在 MessageContract 类型中使用 XML 属性?

转载 作者:数据小太阳 更新时间:2023-10-29 01:52:32 24 4
gpt4 key购买 nike

预先说明:我无法更改传入的 SOAP 请求的格式,因为它们已由国际标准固定 (weeeeeeeee)。

我有一个 SOAP 请求进入我的 WCF 服务,看起来像这样:

<s:Body>
<Request version="1.0">
<data someOtherVersion="1.1">
...
</data>
</Request>
</s:Body>

到目前为止,我们一直在直接使用 System.ServiceModel.Channels.Message 对象,这有点麻烦。我们正尝试转向使用如下所示的强类型:

[MessageContract(IsWrapped = false)]
public class Request
{
[MessageBodyMember]
[XmlAttribute("version")]
public string Version;

[MessageBodyMember]
[XmlElement("data")]
public SomeOtherType Data;
}

[MessageContract(IsWrapped = false)]
public class Response
{
[MessageBodyMember]
[XmlAttribute("version")]
public string Version;

[MessageBodyMember]
[XmlElement("data")]
public SomeOtherType ResponseData;
}

[ServiceContract]
[XmlSerializerFormat]
public interface Service
{
[OperationContract(Action = "request", ReplyAction = "response")]
Response ServiceOperation(Request req);
}

不幸的是,当我们尝试启动时,我们收到一条错误消息“System.ServiceModel.dll 中发生类型为‘System.InvalidOperationException’的未处理异常

附加信息:XmlSerializer 属性 System.Xml.Serialization.XmlAttributeAttribute 在版本中无效。当 IsWrapped 为 false 时,MessageContract 仅支持 XmlElement、XmlArray、XmlArrayItem 和 XmlAnyElement 属性。”

有趣的是,将“IsWrapped”设置为 true 会产生相同的错误。有没有一种方法可以序列化消息协定类型中的 XML 属性,或者使用包装器是我们在这里唯一的选择?

最佳答案

不幸的是,我发现实现此目的的唯一方法是使用包装器类

[MessageContract(IsWrapped = false)]
public class Response
{
[MessageBodyMember(Name = "Response", Namespace = "Http://example.org/ns1")]
public ResponseBody Body { get; set; }

public Response(){}


public Response(ResponseBody body)
{
Body = body;
}
}

[XmlType(AnonymousType = true, Namespace = "Http://example.org/ns1")]
public class ResponseBody
{
[XmlAttribute(AttributeName = "version")]
public string Version { get; set; }

[XmlElement(ElementName = "data", Namespace = "Http://example.org/ns1")]
[MessageBodyMember]
public SomeOtherType ResponseData { get; set; }
}

关于c# - 如何在 MessageContract 类型中使用 XML 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24998525/

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