2012-02-29 132 views
1

我是新的perl web服務調用。Perl wsdl web服務調用

我打電話一個WSDL web服務功能,我得到了響應,400錯誤的請求錯誤。我嘗試並搜索了很多網站,但無法取得成功。請幫我解決這個問題。以下是我的代碼。

use SOAP::Lite; 
my $lite = SOAP::Lite -> service('http://localhost:8080/service.svc?wsdl'); 
my $arg1 ="SRC"; 
my $arg2 = "ARG"; 
my @arg3 = ('test1','test2','test3'); 
my @res = $lite->Func($arg1,$arg2,@arg3); 
print "@res"; 

回答

1

我剛做了類似的problem和似乎SOAP::Lite可能有關於處理複雜的數據結構中的錯誤。

無論如何,如果你的SOAP方法(Func)需要3個參數,最後一個應該是參考陣列。

此外,與use SOAP::Lite qw(trace)你可以調試請求信封。

+0

試圖通過爲參考,但還是說壞請求錯誤本身... :( – Naga 2012-03-01 17:40:11

+0

@Naga:所以下一步我sugegst是調試請求封裝我敢打賭,第三個參數是從信封缺少這可能是原因之一對於不好的請求 – 2012-03-02 12:44:50

0

如果你沒有在SOAP限制::精簡版,我會請你,請看看XML::Compile::SOAP::Client

+0

沒有運氣...也嘗試了上面的..也有同樣的錯誤.... 400錯誤的請求.... – Naga 2012-03-01 21:36:50

0

我不知道有多少的差別是有WSDL和ASMX Web服務之間。如果沒有太多,請嘗試這個代碼示例適合我。

my $soap = SOAP::Lite 
    -> uri('http://foo.com') 
    -> on_action(sub { join '/', 'http://foo.com', $_[1] }) 
    -> proxy('http://foo/services/GetEmailAddress/Service.asmx'); 

    my $method = SOAP::Data->name('GetEmailAddress') 
    ->attr({xmlns => 'http://foo.com/'}); 

    my @params = (SOAP::Data->name(username => $user)); 
    my $email = $soap->call($method => @params)->result; 

輸入是用戶名,輸出是電子郵件地址。我相信ASMX網絡服務是在.NET 3中創建的。

一切我知道如何工作的,我從http://msdn.microsoft.com/en-us/library/ms995764.aspx教訓。

+0

嘗試了上述...得到這樣的錯誤「不能在接收器處理,這是由於EndpointDispatcher的ContractFilter不匹配造成的,這可能是由於合同不匹配(發送者和接收者之間的動作不匹配)或發送者和接收者之間的綁定/安全不匹配所致,請檢查發送者和接收者是否有相同的合同,相同的綁定(包括安全要求,例如消息,傳輸,無)「 – Naga 2012-03-01 21:35:24