由於某種原因,SourceGear在其安裝上提供了未公開的Web服務。他們實際上要求開發人員使用API,因爲Web服務有點麻煩,但這對我來說是個問題,因爲我不能在Perl環境中使用此API,所以他們針對我的特定情況的解決方案是使用Web服務。如何使用SOAP :: Lite訪問SourceGear Web服務?
這應該不成問題。使用SOAP::Lite我曾經以同樣的方式連接到多個Web服務。但是如果你不知道SOAP調用的位置,缺乏文檔是一個主要的混亂。我只有一個XML來解釋在哪裏以及如何進行這些調用。如果一個真正的SOAP天才能夠幫助我解決這個問題,那將是非常棒的。
這是登錄調用的例子和預期的響應:
請求
POST /fortress/dragnetwebservice.asmx HTTP/1.1
Host: velecloudserver
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.sourcegear.com/schemas/dragnet/LoginPlainText"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<LoginPlainText xmlns="http://www.sourcegear.com/schemas/dragnet">
<strLogin>string</strLogin>
<strPassword>string</strPassword>
</LoginPlainText>
</soap:Body>
</soap:Envelope>
響應
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<LoginPlainTextResponse xmlns="http://www.sourcegear.com/schemas/dragnet">
<LoginPlainTextResult>int</LoginPlainTextResult>
<strAuthTicket>string</strAuthTicket>
</LoginPlainTextResponse>
</soap:Body>
</soap:Envelope>
我正在尋找一種方法能夠組裝這不知何故。這是我的Perl示例:
my $soap = SOAP::Lite -> uri ('http://velecloudserver/fortress/dragnetwebservice.asmx') -> proxy('http://velecloudserver/fortress/dragnetwebservice.asmx/LoginPlainText');
my $som = $soap->call('LoginPlainText', SOAP::Data->name('LoginPlainText')->value(
\SOAP::Data->value([
SOAP::Data->name('strLogin')->value('admin'),
SOAP::Data->name('strPassword')->value('Adm1234'),
]))
);
任何提示,將不勝感激。
感謝代理方式轉變爲正常工作我只有一些問題,因爲服務返回1002作爲LoginPlainTextResult和空值strAuthTicket我仍然不知道這意味着什麼,但至少我得到了答覆。 – user565793 2011-01-11 20:58:36