IPhone से SOAP सेवाओं का उपयोग कैसे करें


224

मैं iPhone के लिए एक ऐप विकसित करने की योजना बना रहा हूं और उस ऐप को कुछ SOAP सेवाओं तक पहुंचना होगा। IPhone SDK में कुछ बुनियादी जाँच करने के बाद, मैं SOAP सेवाओं तक पहुँचने के लिए कोई समर्थन नहीं पा रहा था, Googling का थोड़ा सा निष्कर्ष है कि iPhone SDK में SOAP के लिए कोई समर्थन नहीं है।

इसलिए अगर मैं उस ऐप का निर्माण करना चाहता हूं तो मुझे iPhone से SOAP सेवाओं का उपयोग करने के लिए एक दृष्टिकोण के साथ आना होगा। सबसे अच्छा तरीका क्या होगा? किसी भी सर्वोत्तम प्रथाओं? क्या किसी ने पहले से ही SDAP SOO सेवाओं का उपयोग करने के लिए iPhone एसडीके में मौजूद कार्यक्षमता का उपयोग करके एक पुस्तकालय लिखा था?

(चूंकि मुझे जिस सेवा तक पहुंचने की आवश्यकता है वह किसी अन्य पार्टी द्वारा उजागर की जाती है और वे इसे केवल SOAP के रूप में उजागर करते हैं, यह दुर्भाग्य से किसी अन्य प्रकार के इंटरफ़ेस (जैसे REST आधारित एपीआई) पर स्विच करने का विकल्प नहीं है।

Gero


9
हाय जीरो, उर एप्लीकेशन के लिए किस साबुन सेवा का इस्तेमाल किया। जैसा कि आपने किसी भी उत्तर का सही उल्लेख नहीं किया है।
Ameya

3
आप सेवा का उपयोग करने के बाद दूसरों के लिए भविष्य के संदर्भ के लिए ट्यूटोरियल पोस्ट करें।
विनेश टीपी

जवाबों:


52

एक शब्द: नहीं।

स्पष्ट रूप से ठीक है कि एक असली जवाब नहीं है। लेकिन फिर भी SOAP को हर कीमत पर बचना चाहिए। ;-) क्या iPhone और वेब सेवा के बीच प्रॉक्सी सर्वर जोड़ना संभव है? शायद कुछ जो आपके लिए REST को SOAP में परिवर्तित कर दे?

आप कर सकता है की कोशिश CSOAP , (जो iPhone SDK में शामिल है) एक सोप पुस्तकालय कि libxml2 पर निर्भर करता है।

मैंने OSX के लिए अपना SOAP ढांचा लिखा है । हालाँकि यह सक्रिय रूप से बनाए नहीं रखा गया है और इसे iPhone पर पोर्ट करने के लिए कुछ समय की आवश्यकता होगी (आपको शुरुआत के लिए NSXML को TouchXML से बदलना होगा )


11
क्या आप इस कथन के बारे में विस्तार से बता सकते हैं "लेकिन फिर भी SOAP को हर कीमत पर टाला जाना चाहिए"
WillF

9
बस कारण साबुन आवश्यक नहीं है उचित नहीं है, इसके कार्यान्वयन में इसका अधिकार नहीं है, ऐसी आवश्यकताएं हैं जो सबसे अधिक व्यावहारिक रूप से परे जाने की आवश्यकता है
एंथनी मेन

11
@schwa - पूरी तरह से समर्थन सबूत या रक्षा के साथ एक संभावित उपयोगी जवाब पोस्ट करने के लिए डाउनवोट किया गया।
डगडब्ल्यू

12
यह "इसके द्वारा उपयोग न करें क्योंकि यह डिफ़ॉल्ट रूप से प्रदान नहीं किया गया है" का तकनीकी समकक्ष है - कोई वास्तविक तकनीकी कारण नहीं है कि आपको SOAP या किसी अन्य तंत्र का उपयोग नहीं करना चाहिए जो किसी सेवा द्वारा प्रदान किया गया हो।
पेटेश

9
यहाँ कम से कम एक उत्तर है- SOAP, REST की तुलना में एक बहुत ही उच्च-ओवरहेड प्रोटोकॉल है। सभी नामस्थान और वैधता की जाँच और इस तरह आपके संदेश में अतिरिक्त वर्णों का एक टन जोड़ता है, और यह वही है जो आप उच्च-विलंबता, संभावित धीमी नेटवर्क, जैसे कि 3 जी से बचना चाहते हैं। यदि आप यह गारंटी दे सकते हैं कि आपका ऐप केवल 4 जी वातावरण में उत्कृष्ट सिग्नल के साथ उपयोग किया जाएगा, या केवल वाईफाई में, तो यह अधिक स्पष्ट हो सकता है। लेकिन सामान्य रूप से मोबाइल नेटवर्किंग के साथ, कम अधिक है।
विनील शाह

7

मेरा समाधान था प्रॉक्सी सर्वर को रीस्ट स्वीकार करना, एसओएपी अनुरोध जारी करना, और पीएचपी का उपयोग करके वापसी परिणाम।

लागू करने का समय: 15-30 मिनट।

सबसे सुरुचिपूर्ण नहीं, लेकिन ठोस।


4
आपने ऐसा कैसे किया? कोई दस्तावेज। tnx
स्प्रिंग

3
मुझे रहस्यमय गैर-उत्तर पसंद है। यह कैसे हुआ?
gdbj

@gdbj क्योंकि REST और SOAP के बीच एक 1: 1 का रूपांतरण आत्म-व्याख्यात्मक होना चाहिए ...
मैजिक ऑक्टोपस Urn

1
यह वही है, लेकिन इस सवाल का जवाब नहीं है कि लोग यहां क्यों आते हैं। मैं अभी भी इस सवाल पर उत्सुक हूं कि कार्यान्वयन यहां क्या होगा, खासकर अगर यह इतना सरल है।
gdbj

4

मैंने ऐतिहासिक रूप से अपने स्वयं के उपयोग को निम्न स्तर (XML पीढ़ी और पार्सिंग) पर रोल किया है ताकि उद्देश्य-सी से SOAP शैली के अनुरोधों को करने की आवश्यकता हो। कहा कि, SOAPClient ( सोपक्लेकिएंट ) नामक एक पुस्तकालय उपलब्ध है जो खुला स्रोत (बीएसडी लाइसेंस प्राप्त) है और Google कोड ( मैक-सोपक्लिएंट ) पर उपलब्ध है जो ब्याज की हो सकती है।

मैं इसकी क्षमताओं या प्रभावशीलता पर ध्यान नहीं दूंगा, क्योंकि मैंने इसका उपयोग कभी नहीं किया है या इसके साथ एपीआई का काम करना है, लेकिन यह उपलब्ध है और आपकी आवश्यकताओं के आधार पर आपके लिए एक त्वरित समाधान प्रदान कर सकता है।

Apple के पास एक समय में, WS-MakeStubs नामक एक बहुत ही टूटी हुई उपयोगिता थी। मुझे नहीं लगता कि यह iPhone पर उपलब्ध है, लेकिन आप एक ओपन-सोर्स लाइब्रेरी में भी दिलचस्पी ले सकते हैं जिसका उद्देश्य उस कोड को बदलना है - ताकि SOAP क्लाइंट के साथ बातचीत के लिए ऑब्जेक्टिव-सी उत्पन्न हो। फिर, मैंने इसका उपयोग नहीं किया है - लेकिन मैंने इसे अपने नोट्स में चिह्नित किया है: wsdl2objc


धन्यवाद, मैंने wsdl2objc का उपयोग करने की कोशिश की। WSDL से ObjectiveC कोड का निर्माण कार्य करता है, लेकिन (जैसा कि अपेक्षित है) सीधे iPhone SDK के खिलाफ संकलन नहीं करता है। मैंने स्रोतों को थोड़ा मोड़ने की कोशिश की, लेकिन त्रुटियों का एक गुच्छा जो मैं हल नहीं कर सका, समाप्त हो गया
जीरो

2

आप एक उपकरण का उपयोग करके कनेक्ट कर सकते हैं जो मुझे http://www.wsdl2code.com मिला

SampleServiceProxy *proxy = [[SampleServiceProxy alloc]initWithUrl:@"YOUR
        URL" AndDelegate:self];

[proxy GetDouble];
[proxy GetEnum];
[proxy getEnum:kTestEnumTestEnum2];
[proxy GetInt16];
[proxy GetInt32];
[proxy GetInt64];
[proxy GetString];
[proxy getListStrings];

2

यहां एक स्विफ्ट 4 नमूना कोड है जो SOAP सेवा प्रारूप का उपयोग करके एपीआई कॉलिंग को निष्पादित करता है।

   func callSOAPWSToGetData() {

        let strSOAPMessage =
            "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
                "<soap:Body>" +
                "<CelsiusToFahrenheit xmlns=\"http://www.yourapi.com/webservices/\">" +
                "<Celsius>50</Celsius>" +
                "</CelsiusToFahrenheit>" +
                "</soap:Body>" +
        "</soap:Envelope>"

        guard let url = URL.init(string: "http://www.example.org") else {
            return
        }
        var request = URLRequest.init(url: url)
        let length = (strSOAPMessage as NSString).length
        request.addValue("application/soap+xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
        request.addValue("http://www.yourapi.com/webservices/CelsiusToFahrenheit", forHTTPHeaderField: "SOAPAction")
        request.addValue(String(length), forHTTPHeaderField: "Content-Length")
        request.httpMethod = "POST"
        request.httpBody = strSOAPMessage.data(using: .utf8)

        let config = URLSessionConfiguration.default
        let session = URLSession(configuration: config)
        let task = session.dataTask(with: request) { (data, response, error) in
            guard let responseData = data else {
                print("Error: did not receive data")
                return
            }
            guard error == nil else {
                print("error calling GET on /todos/1")
                print(error ?? "")
                return
            }
            print(responseData)
            let strData = String.init(data: responseData, encoding: .utf8)
            print(strData ?? "")
        }
        task.resume()
    }

0

इस लिंक और उनके रोडमैप पर एक नज़र डालें । उनके पास रास्ते में RO | C है, और यह उनकी वेब सेवाओं से जुड़ सकता है, जिसमें संभवतः SOAP भी शामिल है (मैं VCL संस्करण का उपयोग करता हूं जिसमें निश्चित रूप से इसमें शामिल हैं)।


0

पर एक नज़र डालें gsoap कि ios_plugin के तहत डाउनलोड पैकेज में दो आईओएस उदाहरण भी शामिल है। टूल SOAP और XML REST के कोड के लिए WSDL को कनवर्ट करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.