2014-10-14 5 views
0

запрос через SOAP UIКак вызвать массив в SOAP с Савон 2 в рельсах 4

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <tem:GetLastDayRounds> 
     <!--Optional:--> 
     <tem:glIds> 
      <!--Zero or more repetitions:--> 
      <arr:int>7910</arr:int> 
      <arr:int>791524</arr:int> 
      <arr:int>5613</arr:int> 
     </tem:glIds> 
     </tem:GetLastDayRounds> 
    </soapenv:Body> 
</soapenv:Envelope> 

отвечают через SOAP UI

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
     <GetLastDayRoundsResponse xmlns="http://tempuri.org/"> 
     <GetLastDayRoundsResult xmlns:a="http://schemas.datacontract.org/GL.WS" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
      <a:Message i:nil="true"/> 
      <a:Rounds xmlns:b="http://schemas.datacontract.org/GL.WS.Entities"> 
       <b:Round> 
        <b:AdjustedScore>91</b:AdjustedScore> 
       </b:Round> 
       <b:Round> 
        <b:AdjustedScore>92</b:AdjustedScore> 
       </b:Round> 
       <b:Round> 
        <b:AdjustedScore>191</b:AdjustedScore> 
       </b:Round> 
      </a:Rounds> 
      <a:Status>Success</a:Status> 
     </GetLastDayRoundsResult> 
     </GetLastDayRoundsResponse> 
    </s:Body> 
</s:Envelope> 

Это, как я сделал связь:

url = "http://api.wsdl.address" 
    @client = Savon.client(
     wsdl: url, 
     namespace: "http://tempuri.org/", 
     env_namespace: :soapenv, 
     log: true, # set true to switch on logging 
     log_level: :debug, 
     pretty_print_xml: true, 
     open_timeout: 3000000, 
     read_timeout: 3000000 
    ) 

Теперь это то, что я думаю, что мой звонок SAVON 2 должен быть:

response = @client.call(:get_last_day_rounds, message: {"tns:glIds" => [7910,791524]}) 

Но я получаю внутреннюю ошибку от поставщика. Если я тестирую это через SOAP UI, я получаю результат и все прекрасно, однако я не могу понять, как это сделать через SAVON 2.

Спасибо.

SAVON 2 Вход:

По просьбе:

<soapenv:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://tempuri.org/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
    <tns:GetLastDayRounds> 
     <tns:glIds>7910</tns:glIds> 
     <tns:glIds>791524</tns:glIds> 
    </tns:GetLastDayRounds> 
    </soapenv:Body> 
</soapenv:Envelope> 

отвечают:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
    <s:Fault> 
     <faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode> 
     <faultstring xml:lang="en-AU">The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the &lt;serviceDebug&gt; configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs.</faultstring> 
    </s:Fault> 
    </s:Body> 
</s:Envelope> 

Я попытался это тоже:

response = @client.call(:get_last_day_rounds, message: { "tns:glIds" => { "int" => [79124,123] } }) 

SAVON Log:

<soapenv:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://tempuri.org/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
    <tns:GetLastDayRounds> 
     <tns:glIds> 
     <int>791524</int> 
     <int>123</int> 
     </tns:glIds> 
    </tns:GetLastDayRounds> 
    </soapenv:Body> 
</soapenv:Envelope> 

я получил следующее сообщение об ошибке

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
    <s:Fault> 
     <faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode> 
     <faultstring xml:lang="en-AU">The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the &lt;serviceDebug&gt; configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs.</faultstring> 
    </s:Fault> 
    </s:Body> 
</s:Envelope> 
+0

вы должны обеспечить выход журналов. –

+0

Здесь вы идете мат. Я добавил журнал. –

ответ

0

Ok, я нашел его. (В случае, если кто-то его использует)

Пространство имен необходимо изменить.

Поэтому вызов будет:

def make_connection 
    url = "http://api.wsdl.link" 
    @client = Savon.client(
     wsdl: url, 
     namespaces: { 
      "xmlns:tem" => "http://tempuri.org/", 
      "xmlns:arr" => "http://schemas.microsoft.com/2003/10/Serialization/Arrays" 
     }, 
     env_namespace: :soapenv, 
     log: true, # set true to switch on logging 
     log_level: :debug, 
     pretty_print_xml: true, 
     open_timeout: 3000000, 
     read_timeout: 3000000 
    ) 
end 

Теперь, когда я звоню:

response = @client.call(:get_last_day_rounds, message: {"tns:glIds" => { "arr:int" => [5613,79810] } }) 

я получить результат

Приветствия

 Смежные вопросы

  • Нет связанных вопросов^_^