2010-02-14 17 views
12

मैं राष्ट्रीय रेल पूछताछ की एसओएपी सेवा (http://www.livedepartureboards.co.uk/ldbws/) के लिए एक ग्राहक को लागू करने की कोशिश कर रहा हूं।एसओएपी एक्शन डब्ल्यूएसडीएल

मैं डब्ल्यूएसडीएल (http://realtime.nationalrail.co.uk/ldbws/wsdl.aspx) http://soapclient.com/soaptest.html में चिपकाता हूं, लेकिन मुझे त्रुटि संदेश वापस मिलता है "वैध क्रिया पैरामीटर के बिना अनुरोध को संभालने में असमर्थ। कृपया एक वैध साबुन कार्रवाई प्रदान करें।"; पृथ्वी पर क्या कार्रवाई होनी चाहिए?

धन्यवाद, स्टीवर्ट

संपादित करें:

मैं सिर्फ एक त्वरित उदाहरण के रूप में soapclient.com इस्तेमाल किया। मेरे सॉफ्टवेयर में, मैं निम्नलिखित एक्सएमएल भेजता हूं; मुझे अभी भी पता है कि मुझे एक क्रिया याद आ रही है।

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://thalesgroup.com/RTTI/2008-02-20/ldb/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:ldbt2="http://thalesgroup.com/RTTI/2008-02-20/ldb/types" xmlns:ldbt="http://thalesgroup.com/RTTI/2007-10-10/ldb/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ct="http://thalesgroup.com/RTTI/2007-10-10/ldb/commontypes" > 
<SOAP-ENV:Body> 
    <ldbt2:GetDepartureBoardRequest xmlns:ldbt2="http://thalesgroup.com/RTTI/2008-02-20/ldb/" > 
    <ldbt2:numRows>5</ldbt2:numRows> 
    <ldbt2:crs>WAT</ldbt2:crs> 
    <ldbt2:filterCrs>GLD</ldbt2:filterCrs> 
    <ldbt2:filterType>to</ldbt2:filterType> 
    <ldbt2:timeOffset>0</ldbt2:timeOffset> 
    </ldbt2:GetDepartureBoardRequest> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 
+1

यह सबसे अधिक संभावना का मतलब है कि soapclient.com डबल्यूएसडीएल, अपने स्वयं के कारणों के लिए पसंद नहीं है। एनआरई वेब सेवा ठीक काम करती है, हालांकि, मैंने इसे स्वयं इस्तेमाल किया है। – skaffman

+0

देखें http://stackoverflow.com/questions/128263/how-do-you-determine-a-valid-soapaction – Jono

+0

संक्षेप में, साबुन के लिए WSDL खोजें। देखें http://stackoverflow.com/questions/128263/how-do-you-determine-a-valid-soapaction – Jono

उत्तर

11

आप भी एक SOAPAction HTTP शीर्ष लेख क्षेत्र में शामिल करने की आवश्यकता होगी, तो इसकी एक सोप 1.1 सेवा तो:

http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383528

+1

मुझे इतना मिलता है ... लेकिन मैं अपने जीवन के लिए काम नहीं कर सकता SOAPAction फ़ील्ड में क्या होना चाहिए। – Stewart

+1

यह आपके एसओएपी बॉडी में क्या होगा, यानी GetDepartureBoardRequest या पूरी तरह से योग्य: http://thalesgroup.com/RTTI/2008-02-20/ldb/GetDepartureBoardRequest – mythz

+1

मैंने कोशिश की है, लेकिन मैं प्राप्त करें "सर्वर ने HTTP हैडर SOAPAction के मान को पहचाना नहीं है: GetDepartureBoardRequest" – Stewart

4

मैं बिल्कुल वैसा ही समस्या का सामना करना है जब के लिए एक ग्राहक लिखने की कोशिश कर पर्ल के साथ राष्ट्रीय रेल एसओएपी सेवा।

क्योंकि पर्ल मॉड्यूल जो मैं उपयोग कर रहा हूँ 'सोप :: लाइट' सम्मिलित करता SOAPAction शीर्षक में एक '#' समस्या का कारण था ...

SOAPAction: "http://thalesgroup.com/RTTI/2008-02-20/ldb/#GetDepartureBoard" 

यह नेट द्वारा सही ढंग से व्याख्या नहीं की है सर्वर। मैंने O'Reilly के Programming Web Services with SOAP में उदाहरण 3-19 से यह पाया। समाधान धारा 3-20 में नीचे दिया गया था, अर्थात् आपको 'on_action' विधि के साथ शीर्षलेख के प्रारूप को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है।

print SOAP::Lite 
    -> uri('urn:Example1') 
    -> on_action(sub{sprintf '%s/%s', @_ }) 
    -> proxy('http://localhost:8080/helloworld/example1.asmx') 
    -> sayHello($name) 
    -> result . "\n\n"; 

मेरा अनुमान है कि soapclient.com पर्दे के पीछे सोप उपयोग कर रहा है :: लाइट और इसलिए जब राष्ट्रीय रेल से बात कर एक ही समस्या से टकराने कर रहे हैं।

समाधान अपने क्लाइंट को लिखना है ताकि आपके पास SOAPAction शीर्षलेख के प्रारूप पर नियंत्रण हो ... लेकिन आपने शायद पहले से ही ऐसा किया है।

रिचर्ड

0

मैं बस थोड़ी देर के खर्च किया है यह एक एक प्रश्न के लिखित एक Ruby gem जो API तक पहुँचता है काम करने के लिए प्राप्त करने की कोशिश। आप project page पर और अधिक पढ़ सकते हैं।

रूबी में यह काम कर रहा है कोड:

require 'savon' 
client = Savon::Client.new do 
    wsdl.document = "http://realtime.nationalrail.co.uk/LDBWS/wsdl.aspx" 
end 

response = client.request 'http://thalesgroup.com/RTTI/2012-01-13/ldb/GetDepartureBoard' do 

    namespaces = { 
    "xmlns:soap" => "http://schemas.xmlsoap.org/soap/envelope/", 
    "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", 
    "xmlns:xsd" => "http://www.w3.org/2001/XMLSchema" 
    } 

    soap.xml do |xml| 
    xml.soap(:Envelope, namespaces) do |xml| 
     xml.soap(:Header) do |xml| 
     xml.AccessToken do |xml| 
      xml.TokenValue('ENTER YOUR TOKEN HERE') 
     end 
     end 
     xml.soap(:Body) do |xml| 
     xml.GetDepartureBoardRequest(xmlns: "http://thalesgroup.com/RTTI/2012-01-13/ldb/types") do |xml| 
      xml.numRows(10) 
      xml.crs("BHM") 
      xml.filterCrs("BHM") 
      xml.filterType("to") 
     end 
     end 
    end 
    end 
end 
p response.body 

आशा है कि किसी के लिए उपयोगी है!

0

हमने विंडोज सर्वर पर वेब सेवाओं को एक साथ रखा और अपाचे पर PHP से कनेक्ट करने का प्रयास कर रहे थे। हमें एक ही त्रुटि मिली है। यह मुद्दा विभिन्न सर्वरों पर साबुन क्लाइंट के विभिन्न संस्करणों के रूप में समाप्त हुआ। दोनों सर्वरों के विकल्पों में एसओएपी संस्करणों को मिलान करने से हमारे मामले में समस्या हल हो गई। 1. GetServiceDetails 2. GetArrivalBoard 3. GetDepartureBoard 4:

0

GetArrivalDepartureBoard जब soapAction (और कई ग्राहकों के लिए सेट नहीं है, तब भी जब यह डबल्यूएसडीएल में निर्दिष्ट किया जाता) सोप 1.2 अनुरोध में याद आ रही है, कुछ एप्लिकेशन सर्वर (जैसे। Jboss) का अनुमान लगा "वास्तविक" soapAction{xsd:import namespace}+{wsdl:operation name} से। तो, अनुमानित "वास्तविक" soapAction मैच की उम्मीद soapAction बनाने के लिए, आप जावा ईई के लिए अपने WS परिभाषा (@WebMethod(action=...))

उदाहरण में {xsd:import namespace}+{wsdl:operation name} जाने की उम्मीद soapAction सेट कर सकते हैं। एक ठेठ जावा ईई मामले के लिए, यह मदद करता है (नहीं स्टीवर्ट के मामले में, राष्ट्रीय रेल WS 'soapAction' सेट है):

@WebMethod(action = "http://packagename.of.your.webservice.class.com/methodName")

आप सर्वर को नहीं बदल सकते हैं, तो आप soapAction को भरने के लिए ग्राहक के लिए मजबूर करना होगा ।

0

मैं इस समस्या को हल कर लिया है, जावा संहिता में बताया:

MimeHeaders headers = message.getMimeHeaders(); 
headers.addHeader("SOAPAction", endpointURL); 
1

SOAPAction SOAP 1.1 में आवश्यक है, लेकिन खाली हो सकता है ("")।

देखें https://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383528

"(") रिक्त स्ट्रिंग के शीर्षक फ़ील्ड मान "का मतलब है कि सोप संदेश के इरादे HTTP अनुरोध- URI द्वारा प्रदान की जाती है।"

SOAPAction = "सेट करने का प्रयास"

संबंधित मुद्दे