Вернуться к статье

Листинг 2. Исходный текст объекта сервера

Option Explicit

? Типы валют
Public Enum CurrencyID
    curRUR
    curUSD
    curEUR
End Enum

? Соотношения курсов
Private Const RubEur As Double = 23.88
Private Const RubUsd As Double = 27.77
Private Const EurUsd As Double = 1.16
Private Const EurRub As Double = 4.18
Private Const UsdRub As Double = 3.61
Private Const UsdEur As Double = 0.86

? Функция возврата курса
Public Function GetQuotation(ByVal CurID1 As CurrencyID, _
                            ByVal CurID2 As CurrencyID) As Double
    If CurID1 = CurID2 Then
        GetQuotation = 1
    ElseIf CurID1 = curRUR And CurID2 = curEUR Then
        GetQuotation = RubEur
    ElseIf CurID1 = curRUR And CurID2 = curUSD Then
        GetQuotation = RubUsd
    ElseIf CurID1 = curEUR And CurID2 = curUSD Then
        GetQuotation = EurUsd
    ElseIf CurID1 = curEUR And CurID2 = curRUR Then
        GetQuotation = EurRub
    ElseIf CurID1 = curUSD And CurID2 = curRUR Then
        GetQuotation = UsdRub
    ElseIf CurID1 = curUSD And CurID2 = curEUR Then
        GetQuotation = UsdEur
    Else
        GetQuotation = 0
    End If
End Function

Листинг 3. Создание соединения с сервером

? Строка описания сервера
Dim m_sServicesDescription As String

? Установка соединения и запрос SDL
Private Sub m_btnConnect_Click()
On Error GoTo ErrHandler
    ? Объект библиотеки ROPE, необходимый для создания
соединения
    Dim oSOAP As ROPE.SOAPPackager
    Set oSOAP = New ROPE.SOAPPackager
    
    ? Попытка соединения с сервером
    Dim bRetVal As Boolean
    bRetVal = oSOAP.LoadServicesDescription(icURI, _
m_txtURL)
    If (bRetVal = False) Then
        ? Обработка ошибки соединения
        MsgBox ?LoadServicesDescription = False?, , _
            ?LoadServicesDescription  FAILED?
        Exit Sub
    End If
    
    ? Получение описания сервиса
    m_sServicesDescription = oSOAP.ServicesDescription
    
    Exit Sub
ErrHandler:
    MsgBox ?Error # ? & CStr(Err.Number) & _
        ?, Description = ? & Err.Description, vbCritical
End Sub

Вернуться


Листинг 4. Вызов метода объекта с помощью библиотеки SOAP

? Вызов метода
Private Sub m_cmdGetQuotation_Click()
On Error Resume Next
    ? Создание объекта Proxy
    Dim oProxy As ROPE.Proxy
    Set oProxy = New ROPE.Proxy
    
    ? Загрузка SDL-файла
    oProxy.LoadServicesDescription icSTRING, _
m_sServicesDescription

    ? Определение выбора пользователя
    Dim curID1 As CurrencyID
    Dim curID2 As CurrencyID
    
    If m_chkEUR1.Value = True Then
        curID1 = curEUR
    ElseIf m_chkUSD1.Value = True Then
        curID1 = curUSD
    ElseIf m_chkRUR1.Value = True Then
        curID1 = curRUR
    End If
    
    If m_chkEUR2.Value = True Then
        curID2 = curEUR
    ElseIf m_chkUSD2.Value = True Then
        curID2 = curUSD
    ElseIf m_chkRUR2.Value = True Then
        curID2 = curRUR
    End If
    
    ? Вызов метода сервера через объект Proxy
    Dim dQuotation As Double
    dQuotation = oProxy.GetQuotation(curID1, curID2)
    
    ? Вывод на экран XML-текста запроса SOAP
    Dim sDataSent As String
    sDataSent = oProxy.DataSent
    MsgBox sDataSent, , ?sDataSent?
    
    ? Вывод на экран XML-текста ответа SOAP
    Dim sDataReceived As String
    sDataReceived = oProxy.DataReceived
    MsgBox sDataReceived, , ?sDataReceived?
    
    ? Восстановление курсора
    oHourglassClass.Restore
    
    ? Вывод результатов
    m_txtQuotation = CStr(dQuotation)
End Sub

Вернуться к статье
596