【发布时间】:2010-01-06 14:50:56
【问题描述】:
我们观察到,当我们公开一个使用各种 xml 序列化属性修饰的类的 WCF 服务时,尽管我们在接口上使用了 XmlSerializerFormat 属性,但任何操作参数上的任何 XmlRoot 属性都会被完全忽略。 参数的名称空间始终是服务的名称空间,而不是我们指定的名称空间。
这给我们带来了问题,因为它似乎不向后兼容 ASMX,还因为我们正在使用 BizTalk,并且需要更严格地控制交换的 XML 的形状。
那么有几个问题——
- 任何人都知道原因是什么 这个决定的背后是什么?
- 谁都知道 这是怎么回事?我在 WCF 的印象,与 XmlSerializerFormat 属性,使用 用于序列化的 XmlSerializer 类型,这将建议 XmlRoot 应该考虑到如何 来了不是这样吗? (是吗 只是因为,采取 考虑到 SOAP 信封, 参数不是root?)
- 大多数 重要的是 - 任何人都知道 有一种方法可以“强制解决问题”- 即获取参数为 我们选择的命名空间?
我看过 this 的帖子,但我认为这与我的问题无关 -
根据 Wagner Silveira 的要求 - 我用来测试的合同是 -
[ServiceContract(Namespace = "http://servicecontract"),
XmlSerializerFormat(Style = OperationFormatStyle.Document)]
public interface ITestService
{
[OperationContract]
MyOtherType MyTestMethod(MyType obj);
}
// Composite class for DCS and XMLS
[Serializable, XmlType, XmlRoot(Namespace = "http://datacontract")]
public class MyType
{
[XmlAttribute]
public string StringValue { get; set; }
}
// Composite class for DCS and XMLS
[Serializable, XmlType, XmlRoot(Namespace = "http://datacontract")]
public class MyOtherType
{
[XmlAttribute]
public string OtherStringValue { get; set; }
}
【问题讨论】:
标签: wcf xml-serialization