У меня есть сервер WCF, у которого есть вызов, имеющий 2 параметра, но для каждого параметра требуется другое пространство имен. Я не могу указать пространство имен для параметров.
Итак, вызов, который отправляется на сервер (который я не могу адаптировать):
<ns1:myWCFCall
xmlns:ns1="testNameSpace1"
>
<ns1:firstParam>
<ns1:a></ns1:a>
<ns1:b></ns1:b>
</ns1:firstParam>
<ns2:secondParam
xmlns:ns2="testNameSpace2">
<ns2:a></ns2:a>
<ns2:a></ns2:a>
</ns2:secondParam>
</ns1:myWCFCall>
Я создал интерфейс + реализация. Мне нужно использовать XMLSerialization из-за некоторых других ограничений стандартного сериализатора.
Задание XMLElement на уровне параметров (включая пространство имен), похоже, не работает вообще.
[ServiceContract(Namespace = "testNameSpace1")]
[XmlSerializerFormat]
public interface ITestService
{
[OperationContract]
myResponseObject myWCFCall(
[XmlElement(Namespace = "testNameSpace1")] myObject firstParam,
[XmlElement(Namespace = "testNameSpace2")] myOtherObject secondParam);
}
//Implementation
public class Service1 : IService1
{
public myResponseObject myWCFCall(
[XmlElement(Namespace = "testNameSpace1")] myObject firstParam,
[XmlElement(Namespace = "testNameSpace2")] myOtherObject secondParam)
{
return new myResponseObject();
}
}
//Sample classes
[Serializable]
public class myObject
{
[XmlElement]
public string a;
[XmlElement]
public string b;
}
//tried putting this in another C# namespace, no difference in the results.
[Serializable]
public class myOtherObject
{
[XmlElement]
public string a;
[XmlElement]
public string b;
}
Добавление [XmlRoot (Namespace = "testNameSpace2")] не работает для первого уровня. Только для последующих уровней (a, b)
Так что я продолжаю получать неправильный результат, когда проверяю WSDL ... (ns1: secondParam вместо ns2: secondParam):
<ns1:myWCFCall
xmlns:ns1="testNameSpace1"
>
<ns1:firstParam>
<ns1:a></ns1:a>
<ns1:b></ns1:b>
</ns1:firstParam>
<ns1:secondParam
xmlns:ns2="testNameSpace2">
<ns2:a></ns2:a>
<ns2:a></ns2:a>
</ns1:secondParam>
</ns1:myWCFCall>
Справка.