Файл hosts на Heroku

Я пытаюсь подключиться к SOAP API, который находится в DMZ за брандмауэром, используя приложение Ruby/Rack и гем Savon для SOAP и гем HTTPI для запросов/ответов.

API SOAP определяет файл wsdl, который указывает на внутреннее доменное имя за брандмауэром (например, «http://randomhostname/path/to/wsdl»), и это прекрасно работает, когда я определяю IP-адрес для имени хоста в моем /etc /hosts локально на моей машине (1.1.1.1 randomhostname).

Проблема, с которой я столкнулся, заключается в том, что производственная среда для моего приложения работает на Heroku. Как я могу сопоставить внешний IP-адрес сервера, к которому я пытаюсь подключиться, с именем хоста, определенным в wsdl на Heroku или в моем приложении?


person Incomethax    schedule 08.11.2012    source источник


Ответы (1)


Не используйте 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
person Steffen Roller    schedule 15.11.2012
comment
Это сработало, на самом деле я также смог подключиться, указав IP-адрес сервера как http.proxy в настройках конфигурации Savon, но я не думаю, что это так идеально. - person Incomethax; 15.11.2012
comment
Я не использую версию WDSL для производственного кода, потому что каждый раз, когда вы создаете Savon::Client, он анализирует WSDL. Я думаю, что это недостаток производительности, но я не измерял его. - person Steffen Roller; 16.11.2012