powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / (SOAP) Передача структуры с необязательными параметрами
5 сообщений из 5, страница 1 из 1
(SOAP) Передача структуры с необязательными параметрами
    #37201613
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На VB написан вебсервис. В этом сервисе методы работают со сложными многомерными структурами. В этих структурах не все реквизиты являются обязательными поэтому они объявляются как в приведенном примере:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    Public Class sBKI_address
        Public Street As String = ""
        Public City As String = ""
        Public AddressType As Integer =  0 
        Public addressTypeText As String = ""
        Public ZipCode As String = ""
        Public TotalAddress As String = ""
        Public resStat As Int32 =  0 
        Public resStatText As String = ""
        Public subDistrict As String = ""
        Public district As String = ""
        Public houseNumber As String = ""
        Public streetType As Int32 =  0 
        Public block As String = ""
        Public building As String = ""
        Public apartment As String = ""
        Public prov As Int32 =  0 
        Public countryCode As String = ""
        Public countryCodeText As String = ""
        Public addrSinceDt As DateTime
        Public serialNum As Integer =  0 
        Public lastUpdatedDt As DateTime
        Public fileSinceDt As DateTime
        Public freezeFlag As Boolean = False
        Public suppressFlag As Boolean = False
        Public disputedStatus As String = False
        Public disputedRemarks As String = False
    End Class
Но при обращении к сервису всеравно требуется почему-то все заполнять.
Вот вырезка из WSDL-ки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
      <s:complexType name="sBKI_address">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="Street" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="City" type="s:string" />
          <s:element minOccurs="1" maxOccurs="1" name="AddressType" type="s:int" />
          <s:element minOccurs="0" maxOccurs="1" name="addressTypeText" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="ZipCode" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="TotalAddress" type="s:string" />
          <s:element minOccurs="1" maxOccurs="1" name="resStat" type="s:int" />
          <s:element minOccurs="0" maxOccurs="1" name="resStatText" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="subDistrict" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="district" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="houseNumber" type="s:string" />
          <s:element minOccurs="1" maxOccurs="1" name="streetType" type="s:int" />
          <s:element minOccurs="0" maxOccurs="1" name="block" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="building" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="apartment" type="s:string" />
          <s:element minOccurs="1" maxOccurs="1" name="prov" type="s:int" />
          <s:element minOccurs="0" maxOccurs="1" name="countryCode" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="countryCodeText" type="s:string" />
          <s:element minOccurs="1" maxOccurs="1" name="addrSinceDt" type="s:dateTime" />
          <s:element minOccurs="1" maxOccurs="1" name="serialNum" type="s:int" />
          <s:element minOccurs="1" maxOccurs="1" name="lastUpdatedDt" type="s:dateTime" />
          <s:element minOccurs="1" maxOccurs="1" name="fileSinceDt" type="s:dateTime" />
          <s:element minOccurs="1" maxOccurs="1" name="freezeFlag" type="s:boolean" />
          <s:element minOccurs="1" maxOccurs="1" name="suppressFlag" type="s:boolean" />
          <s:element minOccurs="0" maxOccurs="1" name="disputedStatus" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="disputedRemarks" type="s:string" />
        </s:sequence>
      </s:complexType>
Как объявить структуру, чтобы можно было не заполнять не обязательные инициализированные по умолчанию реквизиты?
...
Рейтинг: 0 / 0
(SOAP) Передача структуры с необязательными параметрами
    #37201746
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: NT Man
> Как объявить структуру, чтобы можно было не заполнять не обязательные инициализированные по умолчанию реквизиты?


Никак. Сделай прокси-класс, который будет вызыватся в твоей программе с переменным количеством параметров, а вызов
вебсервиса будет производится уже с полным набором параметров.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
(SOAP) Передача структуры с необязательными параметрами
    #37201759
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь я выкладывал пример своего проекта. Посмотри в
папке клиент файл proxyserver.prg. Это и есть такой класс. В клиентской части я работаю через него.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
(SOAP) Передача структуры с необязательными параметрами
    #37202025
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всетаки интересно, что у строк:
Public Street As String = "" получается <s:element minOccurs="0" maxOccurs="1" name="Street" type="s:string"/>
minOccurs="0" maxOccurs="1" - говорит об опциональности, соответственно строка может и отсутствовать в структуре.

А у других типов:
Public resStat As Int32 = 0 получается <s:element minOccurs="1" maxOccurs="1" name="resStat" type="s:int"/>
minOccurs="1" maxOccurs="1" - говорит об обязатености заполнения поля при передаче через сервис

Руками править WSDL, вроде как не правильно. А как оъявить так чтобы Int32 был в WSDL как <s:element minOccurs="0" maxOccurs="1" name="resStat" type="s:int"/> непонятно, я не знаток VB.
...
Рейтинг: 0 / 0
(SOAP) Передача структуры с необязательными параметрами
    #37202131
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: NT Man
> minOccurs="0" maxOccurs="1" - говорит об опциональности, соответственно строка может и отсутствовать в структуре.


Вообще-то здесь говорится о четвертом фреймворке. Это
может не поддерживатся ранними версиями.

Для мембера класса нет никаких квалификаторов опциональности, для параметра функции можешь попробовать такое объявление
:
Код: plaintext
1.
2.
Function Test(ByVal A As Long, Optional ByVal b As Long = - 1 ) As String

End Function
сгенерировать wsdl и посмотреть на результат.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / (SOAP) Передача структуры с необязательными параметрами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]