2012-05-17 2 views
1

У меня есть веб-служба в .NET, которая принимает массив как входной. Запрос на обслуживание seens вASP.NET alter SOAP body

<soap:Body> 
<DisplayNames xmlns="http://tempuri.org/"> 
    <Names> 
    <Name> 
     <FirstName>string</FirstName> 
     <LastName>string</LastName> 
    </Name> 
    <Name> 
     <FirstName>string</FirstName> 
     <LastName>string</LastName> 
    </Name> 
    </Names> 
</DisplayNames> 

можно удалить родительский тег (ИМЕНА) и сделать запрос, как показано ниже?

<soap:Body> 
<DisplayNames xmlns="http://tempuri.org/"> 
    <Name> 
     <FirstName>string</FirstName> 
     <LastName>string</LastName> 
    </Name> 
    <Name> 
     <FirstName>string</FirstName> 
     <LastName>string</LastName> 
    </Name> 
</DisplayNames> 

+0

Почему вы хотите его изменить? Разве это не работает? –

+0

Люди, потребляющие его на SUP, не могут обрабатывать объект, если его вложенные теги. Ограничение SUP я предполагаю. Поэтому им нужна плоская структура – Shivaram

ответ

1

Изменено мой метод

из

[WebMethod] общественности строки DisplayNames (Name [] NameCollection) {

в

[WebMethod] публичная строка Disp layNames ([XmlElement ("Имена")] Имя [] NameCollection) {

1

Если вы имеете в виду изменить способ веб-сервис работает так, что клиент не должен отправлять его таким образом, не используя существующие инструменты. Это связано с тем, как XML преобразуется обратно в функцию кода.

Я не знаю точно, что ваша функция выглядит в код-сзади, но с XML я могу предположить, что это выглядит следующим образом (догадываясь возвращаемого значения)

[WebMethod] 
private bool DisplayNames(Name[] Names) 
{ 
    ... 
} 

Данный сервис JUST принимает массив имен. В теге <Names> указан один входной параметр. Среда выполнения распознает это как ожидаемый параметр имен и может анализировать его. То, о чем вы думаете, может работать, если все веб-службы ТОЛЬКО принимают один параметр массива.

Я не знаю, имеет ли это смысл, но скажем, в случае иллюстрации, что эта веб-служба также принимает булевое имя «IgnoreErrors».

[WebMethod] 
private bool DisplayNames(Name[] Names, bool IgnoreErrors) 
{ 
    ... 
} 

XML, будет выглядеть следующим образом:

<soap:Body> 
<DisplayNames xmlns="http://tempuri.org/"> 
    <Names> 
    <Name> 
     <FirstName>string</FirstName> 
     <LastName>string</LastName> 
    </Name> 
    <Name> 
     <FirstName>string</FirstName> 
     <LastName>string</LastName> 
    </Name> 
    </Names> 
    <ShowErrors> 
    <value>false</value> 
    </ShowErrors> 
</DisplayNames> 

Теперь, если вы должны были сделать то, что вы просите, удалить тег, он будет выглядеть следующим образом:

<soap:Body> 
<DisplayNames xmlns="http://tempuri.org/"> 
    <Name> 
     <FirstName>string</FirstName> 
     <LastName>string</LastName> 
    </Name> 
    <Name> 
     <FirstName>string</FirstName> 
     <LastName>string</LastName> 
    </Name> 
    </Names> 
    <ShowErrors> 
    <value>false</value> 
    </ShowErrors> 
</soap:Body> 

Когда вы посмотрите на это, попробуйте представить, как будет выглядеть подпись функции в коде. Вместо одного массива и одного логического значения теперь это выглядит как два словаря и логическое значение.

Итак, все сказанное, опять же, тег <Name> идентифицирует параметр Name в функции кода.

Смежные вопросы