【发布时间】:2010-10-13 14:09:24
【问题描述】:
我们有一个现有的 SOAP Web 服务接口,我们希望使用 WCF 为新应用程序实现该接口。除了一个小细节外,这似乎工作正常。函数返回类型的 XML 命名空间必须不同于 Web 服务本身的 XML 命名空间。而对于我的一生,我无法让它发挥作用。
我用一个小示例项目重现了同样的问题。 WCF 接口:
[XmlSerializerFormat]
[ServiceContract(Namespace = "urn:outer-namespace")]
public interface IService1
{
[OperationContract]
MyClass DoStuff(int value);
}
[Serializable]
public class MyClass
{
[XmlElement(ElementName = "DataString")]
public string MyString { get; set; }
}
网络服务实现:
public class Service1 : IService1
{
public MyClass DoStuff(int value)
{
return new MyClass { MyString = "Wooh!" };
}
}
来自该网络服务的响应随后被序列化为: (省略 SOAP 的东西)
<DoStuffResponse xmlns="urn:outer-namespace">
<DoStuffResult>
<DataString>Wooh!</DataString>
</DoStuffResult>
</DoStuffResponse>
但我们希望
我尝试在接口函数或 Web 服务函数上添加 [return: XmlElement(...)] ,但没有成功。 MyClass 类定义中的 [XmlType] 或 [XmlRoot] 也不起作用。
有谁知道如何更改作为 WCF Web 服务函数返回值的对象的序列化 XML 命名空间(或元素名称)?
【问题讨论】:
标签: c# xml wcf serialization xml-serialization