2010-11-20 93 views
0

這個Ruby代碼的偉大工程:瑣碎的端口出現故障

require 'soap/wsdlDriver' 
wsdl_url = 'http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl' 
proxy = SOAP::WSDLDriverFactory.new(wsdl_url).create_rpc_driver 
print proxy.NDFDgen(35.05,-106.65,"glance","2010-11-20T00:00:00","2010-11-20T07:00:00","temp") 

這Perl代碼返回一個空字符串:

use SOAP::Lite; 
$client = SOAP::Lite->new(proxy => "http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl"); 
$som = $client->call("NDFDgen", 35.05,-106.65,"glance","2010-11-20T00:00:00","2010-11-20T07:00:00","temp"); 
die $som->fault->{ faultstring } if ($som->fault); 
print $som->result, "\n"; 

請告訴爲什麼? (Perl代碼幾乎是從「perldoc SOAP :: Lite」直接複製/粘貼的)。

回答

1

您引用的ruby代碼無法按預期工作 - 它將返回的不僅僅是「temp」預測。請參閱http://g.chasefox.net/clearos/ruby/noaa-nws-ndfd

關於perl代碼,我建議查看NOAA的示例。他們提供了幾種語言的示例,其中之一是perl,它使用SOAP :: Lite。見:http://www.weather.gov/forecasts/xml/sample_products/ndfdXML.tar

print SOAP::Lite 
     ->proxy('http://www.weather.gov/forecasts/xml/SOAP_server/ndfdXMLserver.php') 
     ->uri('http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl') 
     ->NDFDgen(SOAP::Data->name("latitude" => 35.05), 
       SOAP::Data->name("longitude" => -106.65), 
       SOAP::Data->name("product" => "glance"), 
       SOAP::Data->name("startTime" => "2011-05-08T00:00:00"), 
       SOAP::Data->name("endTime" => "2011-05-09T00:00:00"), 
       SOAP::Data->name("weatherParameters" => 'blah')) 
     ->result 
+0

我想我的問題是:爲什麼上面的Perl代碼沒有像上面的Ruby代碼那樣工作,因爲它們幾乎是相同的。 – barrycarter 2011-05-07 01:32:31

+0

,因爲它們是使用不同庫的不同語言。這些請求必須結構正確。如果你看看NOAA的perl例子,你會發現它涉及更多。我不只是粘貼一段代碼,因爲我們正在談論10行代碼來正確地格式化請求。 – Secesh 2011-05-07 10:06:14

+0

下面是一個類似於你的ruby代碼的perl例子。我沒有打擾所有的天氣參數,因爲掃視產品不支持它們 - 它將全部返回。 – Secesh 2011-05-07 10:40:33

1

SOAP :: Lite非常難以使用 - 您可能會發現XML::Compile::SOAP對您更好。

+0

好的,但我仍然想知道我在做什麼錯誤上面? – barrycarter 2010-12-18 04:05:08