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