В обычных условиях именно клиент должен соответствовать типу ответа, отправляемого веб-службой. Однако ваш случай выглядит иначе, поскольку вы создаете веб-сервис, который предоставляет уже существующему клиенту форматированный ответ.
Чтобы решить проблему префикса пространства имен, ссылка, которую вы упомянули в своем вопросе, обеспечивает соответствующее решение; Вам нужно будет «направлять» XmlSerializer во время процесса сериализации, и вы можете сделать это, указав атрибут XmlNamespaceDeclarations для свойства, которое возвращает объект типа XmlSerializerNamespaces. Свойство также должно быть устанавливаемым, иначе пространства имен не будут применяться.
Когда вы добавите следующий код в свой класс getResponse, ответ xml будет соответствовать ожидаемому формату в вашем примере:
[XmlNamespaceDeclarations()]
public XmlSerializerNamespaces xmlsn
{
get
{
XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
xsn.Add("mes-root", "http://tempuri.org/getCustomer/");
return xsn;
}
set
{
//Just provide an empty setter.
}
}
Анализ класса WSDL, сгенерированного для такого веб-сервиса, показывает следующий метод («GetMyResponse» — это имя, которое я дал методу WS, который возвращает объект GetResponse):
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/getCustomer/GetMyResponse", RequestNamespace = "http://tempuri.org/getCustomer/", ResponseNamespace = "http://tempuri.org/getCustomer/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public GetResponse GetMyResponse()
{
object[] results = this.Invoke("GetMyResponse", new object[-1 + 1]);
return (GetResponse)results(0);
}
Я считаю, что атрибуты RequestNamespace и ResponseNamespace имеют значение.
Надеюсь, это устранит некоторые проблемы в понимании лежащей в основе сериализации Xml, которая здесь имеет место.
Изменить (после комментариев)
Вот ответ, который я получил через свой тестовый веб-сервис:
<?xml version="1.0" encoding="utf-8"?>
<mes-root:GetResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mes-root="http://tempuri.org/getCustomer/">
<mes-root:Result>OK</mes-root:Result>
<mes-root:ErrorsList>
<mes-root:string>SomeErrors</mes-root:string>
<mes-root:string>SomeMoreErrors</mes-root:string>
</mes-root:ErrorsList>
</mes-root:GetResponse>
person
Cerebrus
schedule
21.03.2009