Может ли Visual Studio 2005 wsdl.exe создавать прокси-методы с общими параметрами? - PullRequest
1 голос
/ 14 января 2010

Методы прокси, которые я вижу сгенерированными для методов, имеющих обобщенные значения для таких параметров, как List Of <T>, преобразуются в массивы в методах прокси. Я не уверен, в чем проблема, в том, что wsdl.exe, поставляемый с Visual Studio 2005, не может обрабатывать дженерики, или это версия мыла на компьютере, на котором развернут веб-сервис, или что-то еще? Когда я просматриваю файл asmx в IE 7, я вижу SOAP 1.1, я ожидал увидеть мыло 1.2, но это может быть вещь для IE7.

Ответы [ 3 ]

1 голос
/ 14 января 2010

.NET XmlSerializer сериализует коллекции в массивы. Я не знаю, есть ли какая-то разница для общих списков, но я сомневаюсь в этом. Поскольку такие SOAP-«коллекции» всегда являются массивами .NET, сгенерированный прокси-сервер должен восстановить массив до нужного типа коллекции (который действительно является его выбором).

Еще одним побочным эффектом сериализации коллекций в массивы является то, что сериализуются только элементы коллекции. Например, приведенный ниже класс наследуется от списка и добавляет новое свойство, которое не будет сериализовано XmlSerializer, поскольку массивы состоят только из элементов, а не дополнительных свойств.

public class MyList : List
{
    public string MyProperty{get;set;}
}

Этот бихевиоризм специфичен для XmlSerializer, двоичные сериализаторы (и, возможно, DataContractSerializer WCF) могут обрабатывать эти условия.

1 голос
/ 14 января 2010

WSDL.EXE и «Добавить веб-ссылку» всегда будут использовать массив. Это не имеет ничего общего с генериками.

При обновлении до WCF вы сможете указать, использовать ли List<T> для таких списков.


XML-схема не имеет ни массивов, ни списков, только повторяющиеся элементы. Например, если ваша служба возвращает List<int>, схема XML в WSDL будет выглядеть примерно так:

<xs:element name="result" maxOccurs="unbounded" type="xs:int"/>

Программа, которая создает прокси-класс, должна решить, преобразовать ли это в массивы или списки. С «Добавить веб-ссылку», выбор всегда «массив». С помощью «Добавить справочную службу» вы получаете несколько вариантов, включая List<int>.

0 голосов
/ 14 января 2010

Обобщения не совместимы.

...