Я пытаюсь подключиться к веб-сервису из Ruby с помощью Savon - это веб-сервис на основе SOAP. Для этого также требуется сертификат x509, для которого у меня есть ключи, но я пытаюсь обойти это в минуту, просто чтобы он работал с ssl_verify_mode, для которого установлено значение none.
client = Savon.client(wsdl: WSDL_URL,
log: true, # set to true to switch on logging
log_level: :debug,
convert_request_keys_to: :camelcase,
pretty_print_xml: true,
ssl_verify_mode: :none)
Мне удалось сгенерировать классы WSDL в .NET и использовать веб-сервис из клиентского приложения С#.
Мой С# для вызова GetInformation от клиента ниже
var analysisTypes = new AnalysisType[4];
analysisTypes[0] = AnalysisType.A;
analysisTypes[1] = AnalysisType.B;
analysisTypes[2] = AnalysisType.C;
analysisTypes[3] = AnalysisType.D;
var coord1 = new Coordinate {
Id = i.ToString(),
X = -110.5322,
Y = 35.2108, QualityIndex = 90 };
string ticketId = serviceClient.GetInformationsForCoordinates(
coord1, analysisTypes);
Однако я новичок в Ruby, и мне трудно заставить то же самое, сгенерированное ниже, передать Savon - пока у меня есть следующее:
coordinate = { Id: '1', X: -110.5322, Y: 35.2108, QualityIndex: 90 }
ticket_id = client.call(:get_informations_for_coordinates,
message: coordinate)
print ticket_id
Это не удается - я вижу сообщение SOAP, которое оно отправляет ниже:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://tempuri.org/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<tns:GetInformationsForCoordinates>
<Id>1</Id>
<X>-110.5322</X>
<Y>35.2108</Y>
<QualityIndex>90</QualityIndex>
</tns:GetInformationsForCoordinates>
</env:Body>
</env:Envelope>
Если я посмотрю на мыльный интерфейс и нажму на GetInformationsForCoordinates, я увижу, как мне следует создать сообщение SOAP - как мне лучше всего создать этот тип сообщения в Ruby - я должен передать все это как сообщение и изменить переменная координаты должна быть сообщением?
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:tem="http://tempuri.org/"
xmlns:mun="http://WebService I want to hit"
xmlns:mun1="http://WebService I want to Hit">
<soap:Header/>
<soap:Body>
<tem:GetInformationsForCoordinates>
<!--Optional:-->
<tem:coordReq>
<!--Optional:-->
<mun:Basemap>?</mun:Basemap>
<!--Optional:-->
<mun:GenerateReport>?</mun:GenerateReport>
<!--Optional:-->
<mun:MapsForReport>
<!--Zero or more repetitions:-->
<mun1:HMap>?</mun1:HMap>
</mun:MapsForReport>
<!--Optional:-->
<mun:PortName>?</mun:PortName>
<!--Optional:-->
<mun:Coordinates>
<!--Zero or more repetitions:-->
<mun:Coordinate>
<!--Optional:-->
<mun:Id>?</mun:Id>
<!--Optional:-->
<mun:QualityIndex>?</mun:QualityIndex>
<!--Optional:-->
<mun:X>?</mun:X>
<!--Optional:-->
<mun:Y>?</mun:Y>
</mun:Coordinate>
</mun:Coordinates>
</tem:coordReq>
<!--Optional:-->
<tem:analysisTypes>
<!--Zero or more repetitions:-->
<mun:AnalysisType>?</mun:AnalysisType>
</tem:analysisTypes>
</tem:GetInformationsForCoordinates>
</soap:Body>
</soap:Envelope>