Автоматически генерировать код заглушки в C ++ для доступа к веб-сервису? - PullRequest
2 голосов
/ 11 января 2012

Я задаю вопрос с этим вопросом. Я ищу инструмент, который позволит избежать большого количества кодирования, автоматически генерируя большую часть кода для доступа к веб-сервису.

Я пытаюсь помочь кому-то, кто использует систему 4GL, которая не поддерживает веб-сервисы. Однако они могут получить доступ к Win32 DLL - что выглядит как самое простое решение. Все, что им нужно - это иногда вызывать функцию в веб-сервисе и возвращать результат.

Прошло много времени с тех пор, как я написал C ++, и мои попытки сделать это показали, насколько я ржавый.

Я играл с gsoap2 toolkit и svcutil.exe от MS для автоматической генерации кода.

Они делают то, что должны, но, в отличие от инструмента добавления ссылок в Visual Studio с vb.net или c # .net, эти наборы инструментов не генерируют класс доступа-заглушки, который мне удалось найти. Вместо этого они генерируют индивидуальные вызовы функций для каждого метода, и вы должны передать им httpcontexts и целую кучу других вещей - что-то, что я действительно не хочу изучать, как это сделать.

То, что я хочу сделать, является механическим:

  • Примите определение WSDL
  • Автогенерация кода доступа к веб-службе (готово - gsoap2)
  • Записать / сгенерировать небольшую заглушку для открытия веб-службы и проверки подлинности с использованием обычной проверки подлинности и для возврата экземпляра класса экземпляра веб-службы.
  • опубликовать как dll

Идея состоит в том, чтобы иметь одну DLL с одной функцией, такой как getws (имя пользователя, пароль, URL) который вернет объект, который предоставляет методы веб-сервисов - заглушка, ничего умного.

Я знаю, что я цепляюсь за соломинку, но кто-нибудь знает инструмент / способ избежать всей механической работы и в итоге получить простой класс, который я могу изменить, чтобы добавить аутентификацию.

В веб-сервисе есть около 30 методов - и я должен раскрыть их все, у каждого есть набор параметров. Написание класса-заглушки для вызова функций, сгенерированных gsoap2, будет много набора текста и кошмаром, чтобы добраться до работы / отладки. Должен быть лучший способ.

То, что я хочу сделать, является эквивалентом кода .net ниже - VS автоматически генерирует код WS. Все, что мне нужно сделать, это раскрыть это в моем классе.

 Private Shared oWs As WS.publicws = Nothing

 Public Shared Function GetWS(ByVal Username As String, ByVal password As String, ByVal URL As String) As WS.publicws
    Dim oBinding As New ServiceModel.BasicHttpBinding

    If Not oWs Is Nothing Then Return oWs

    Dim oEndPoint As New ServiceModel.EndpointAddress(URL)
    oBinding.Security.Mode = ServiceModel.BasicHttpSecurityMode.TransportCredentialOnly
    oBinding.Security.Transport.Realm = ServiceModel.HttpClientCredentialType.Basic

    oWS = New WS.publicws (oBinding, oEndPoint)
    oWS.ClientCredentials.UserName.UserName = username
    oWS.ClientCredentials.UserName.Password = password

    Using scope = New ServiceModel.OperationContextScope(oWs.InnerChannel)
        ServiceModel.OperationContext.Current.OutgoingMessageProperties(System.ServiceModel.Channels.HttpRequestMessageProperty.Name) = httpRequestProperty
    End Using

    Return oWs
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...