У нас есть существующий интерфейс веб-службы SOAP, который мы хотим реализовать с помощью WCF для нового приложения. Кажется, все работает нормально, за исключением одной маленькой детали. Пространство имен XML возвращаемого типа функции должно отличаться от пространства имен 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>
Но мы хотим, чтобы ‹DoStuffResult› имел xmlns = "urn: inner-namespace".
Я пробовал добавить [return: XmlElement (...)] в функцию интерфейса или функцию веб-службы, но этого не произошло. Также не работают [XmlType] или [XmlRoot] в определении класса MyClass.
Кто-нибудь знает, как изменить сериализованное пространство имен XML (или имя элемента) объекта, который является возвращаемым значением функции веб-службы WCF?