2012-11-08 82 views
1

我試圖連接到位於防火牆後面的DMZ中的SOAP API,使用Ruby/Rack應用程序和Savon gem for SOAP以及HTTPI gem請求/響應。Heroku上的主機文件

SOAP API定義了一個wsdl文件,指向防火牆後面的內部域名(例如「http:// randomhostname/path/to/wsdl」),當我將ip定義爲主機名時,在我的機器上的本地/ etc/hosts文件中(1.1.1.1 randomhostname)。

我遇到的問題是我的應用程序的生產環境在Heroku上運行。 如何將我嘗試連接的服務器的外部IP映射到Heroku上的wsdl或我的應用程序中定義的主機名?

回答

0

請勿使用WSDL。直接調用函數。像這樣:

 
#!ruby 

require 'savon' 

stock_handle = ARGV[0] || 'OTEX' 

client = Savon::Client.new do 
    wsdl.endpoint = 'http://www.webservicex.net/stockquote.asmx' 
    wsdl.namespace = 'http://www.webserviceX.NET/' 
end 

response = client.request :wsdl, 'GetQuote' do 
    http.headers["SOAPAction"] = '"http://www.webserviceX.NET/GetQuote"' 
    soap.body = { "symbol" => stock_handle } 
end 

print response 
+0

這個工作,我實際上也可以通過在Savon配置設置中指定服務器IP作爲http.proxy進行連接,但我認爲這並不理想。 – Incomethax

+0

我沒有將WDSL版本用於生產代碼,因爲每次創建Savon :: Client時都會分析WSDL。我認爲這是一個性能劣勢,但我沒有真正衡量它。 –