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