Почему массив объектов класса возвращается с префиксом ArrayOf? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть веб-сервис, из которого я генерирую wsdl.

У него есть классы и функции.

    public DT_PM[] EndSI_PM(System.IAsyncResult asyncResult) {
        object[] results = this.EndInvoke(asyncResult);
        return ((DT_PM[])(results[0]));
    }

Но wsdl создает его как

ArrayOfDT_PM

и

<s:element name="SI_PM" type="tns:ArrayOfDT_PM"/>
<s:complexType name="ArrayOfDT_PM">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="DT_PM" nillable="true">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="ST" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>

1 Ответ

0 голосов
/ 05 ноября 2019

Он предназначен для того, чтобы сделать язык определения wsdl независимым. Услуга WCF может использоваться клиентами, написанными на разных языках программирования. Арайсы могут быть представлены разными структурами данных. Даже в .net вы можете использовать эти данные в виде массива или в виде списка. Для поддержки этого массивы в схеме WSDL определены как complexType с именем ArrayOfXXX. Генератор клиентского кода должен иметь возможность использовать это и преобразовывать в правильное определение типа.

Обновление после дополнительных вопросов: в соответствии со спецификацией WSDL типы массивов должны называться ArrayOfXXX. См. https://www.w3.org/TR/wsdl.html#_types.

Если вы еще раз проверите WSDL, вы увидите, что ArrayOfDT_PM определен как sequence из DT_PM элементов с unbounded числом макс. Это означает, что когда будет сгенерирован код клиента, он будет обрабатывать этот ArrayOfDT_PM как список / массив DT_PM элементов. Какой желаемый результат.

...