Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / (SOAP) Передача структуры с необязательными параметрами / 5 сообщений из 5, страница 1 из 1
06.04.2011, 09:26
    #37201613
NT Man
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SOAP) Передача структуры с необязательными параметрами
На 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
06.04.2011, 10:36
    #37201746
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SOAP) Передача структуры с необязательными параметрами
> Автор: NT Man
> Как объявить структуру, чтобы можно было не заполнять не обязательные инициализированные по умолчанию реквизиты?


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

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

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
06.04.2011, 12:10
    #37202025
NT Man
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SOAP) Передача структуры с необязательными параметрами
Всетаки интересно, что у строк:
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
06.04.2011, 12:33
    #37202131
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(SOAP) Передача структуры с необязательными параметрами
> Автор: 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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / (SOAP) Передача структуры с необязательными параметрами / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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