Что нового

[Сеть, интернет] Обмен по SOAP через HTTPS

Zhavner

Новичок
Сообщения
9
Репутация
0
Приветствую!
Нужно организовать обмен с сервисом SOAP по HTTPS. Прочитал, что смог найти, однако так и не понимаю как это организовать. Не хватает опыта и информации. Сложность в том, что авторизация на сервисе должна проходить по логину-паролю и клиентскому сертификату. На данный момент, хотелось бы использовать высокоуровневые методы объектов MSSOAP. Низкоуровневые пока сложно. Вот, что на сейчас получается, пример взят с англоязычного форму:

Код:
Dim $oMyError
$oMyError = ObjEvent("AutoIt.Error","MyErrFunc")

Dim $SOAPClient
$SOAPClient = ObjCreate("MSSOAP.SOAPClient30")

$SOAPClient.mssoapinit("c:\..AutoRegService.wsdl")
If @error then
	ConsoleWrite( $SOAPClient.faultString)
	ConsoleWrite( $SOAPClient.detail)
Endif
$SOAPClient.ConnectorProperty("AuthUser") = "##"
$SOAPClient.ConnectorProperty("AuthPassword") = "##"
$SOAPClient.ConnectorProperty("EndPointURL") = "https://..."
$SOAPClient.ConnectorProperty("SSLClientCertificateName") = "..."
$SOAPClient.ConnectorProperty("UseSSL") = 1
If @error then
    ConsoleWrite($SOAPClient.faultString)
    ConsoleWrite($SOAPClient.detail)
Endif

$M = $SOAPClient.metod("##", "##", "##", "##")
If @error then
    ConsoleWrite($SOAPClient.faultString)
    ConsoleWrite($SOAPClient.detail)
Endif

;This is COM error handler
Func MyErrFunc()
  $HexNumber=hex($oMyError.number,8)
  Msgbox(0,"COM Error Test","We intercepted a COM Error !"     & @CRLF  & @CRLF & _
             "err.description is: " & @TAB & $oMyError.description  & @CRLF & _
             "err.windescription:"   & @TAB & $oMyError.windescription & @CRLF & _
             "err.number is: "       & @TAB & $HexNumber              & @CRLF & _
             "err.lastdllerror is: "   & @TAB & $oMyError.lastdllerror   & @CRLF & _
             "err.scriptline is: "   & @TAB & $oMyError.scriptline   & @CRLF & _
             "err.source is: "       & @TAB & $oMyError.source       & @CRLF & _
             "err.helpfile is: "       & @TAB & $oMyError.helpfile     & @CRLF & _
             "err.helpcontext is: " & @TAB & $oMyError.helpcontext _
            )
  SetError(1) ; to check for after this function returns
Endfunc


И оно естественно не работает. На вызове метода вылетает в ошибку с описанием "неизвестное имя".
В самом файле метод описан как:

Код:
 <message name='metod'>
  <part name='par1' type='xsd:string'></part>
  <part name='par2' type='xsd:string'></part>
  <part name='par3' type='xsd:string'></part>
  <part name='par4' type='xsd:string'></part>
 </message>

Так как не могу предоставить ни логина с паролем, ни сертификата, то проверять и тестировать сложно. Поэтому буду рад любой помощи, комментам, примерам, вобщем любой информации.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Попробуйте так:
Код:
$SOAPClient.ConnectorProperty("AuthUser","##")
$SOAPClient.ConnectorProperty("AuthPassword","##")
$SOAPClient.ConnectorProperty("EndPointURL","https://...")
$SOAPClient.ConnectorProperty("SSLClientCertificateName","...")
$SOAPClient.ConnectorProperty("UseSSL",1)
 
Автор
Z

Zhavner

Новичок
Сообщения
9
Репутация
0
Garrett сказал(а):
Попробуйте так:
Код:
$SOAPClient.ConnectorProperty("AuthUser","##")
...

Увы. В такой записи ошибка на эти строки - "Недопустимое число параметров"

Upd.
Такая запись всетаки думаю, что верная.
Код:
$SOAPClient.ConnectorProperty("AuthUser") = "##"

Потому что после установки значения этого свойства, его можно также и прочитать.
 
Автор
Z

Zhavner

Новичок
Сообщения
9
Репутация
0
Не вчитался в WSDL :(
Оказывается обращался не к тому методу. Но сейчас другая проблема. Не видит клиентский сертификат.
Выкидывает ошибку:
Код:
Connector:Bad certificate.Connector:Bad certificate. HRESULT=0x800A1529 - Client:An unanticipated error occurred during the processing of this request. HRESULT=0x800A1529 - Client:Sending the Soap message failed or no recognizable response was received HRESULT=0x800A1529 - Client:Unspecified client error. HRESULT=0x800A1529

Я указываю просто отпечаток сертификата.
Код:
$SOAPClient.ConnectorProperty("SSLClientCertificateName","ABC12345...")

Может надо как по другому.. Полез опять читать километры страничек.
 
Автор
Z

Zhavner

Новичок
Сообщения
9
Репутация
0
Похоже, что это ошибки в самом объекте при работе с сертификатами. Было исправление от Микрософта к SOAPToolkit, исправляющее эту ошибку, но найти не смог.
А если без использования сертификата, по http, работает на ура.
Вобщем, дальнейшее уже AutoIt не касается.
Пошел осваивать .Net
 
Верх