2008-10-15 5 views
221

से एसओएपी सेवाओं तक कैसे पहुंचे Iphone के लिए एक ऐप विकसित करने की योजना बना रहा हूं और उस ऐप को कुछ एसओएपी सेवाओं तक पहुंचना होगा। आईफोन एसडीके में कुछ बुनियादी जांच करते समय मुझे एसओएपी सेवाओं तक पहुंचने के लिए कोई समर्थन नहीं मिला, इस बात पर निष्कर्ष निकाला गया कि आईओएस एसडीके में एसओएपी के लिए कोई समर्थन नहीं है।आईफोन

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

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

Gero

+9

हाय Gero, क्या साबुन सेवा यू उर आवेदन के लिए उपयोग किया था। क्योंकि आपने किसी भी उत्तर का सही उल्लेख नहीं किया है। – Ameya

+3

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

उत्तर

0

here this link पर एक नज़र और उनके रोडमैप है वे आरओ है |। सी रास्ते पर है, और है कि उनके वेब सेवाओं, जो शायद सोप (मैं VCL संस्करण है जो निश्चित रूप से इसे शामिल का उपयोग) भी शामिल है से कनेक्ट कर सकते

51

। एक शब्द: मत करो

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

आप CSOAP, एक SOAP लाइब्रेरी का प्रयास करें जो libxml2 (जो आईफोन एसडीके में शामिल है) पर निर्भर करता है।

मैंने ओएसएक्स के लिए अपना खुद का SOAP framework लिखा है। हालांकि इसे सक्रिय रूप से बनाए रखा नहीं गया है और आपको आईफोन में बंदरगाह के लिए कुछ समय की आवश्यकता होगी (आपको शुरुआत के लिए TouchXML के साथ एनएसएक्सएमएल को प्रतिस्थापित करने की आवश्यकता होगी)

+10

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

+0

यदि आपको कोई फर्क नहीं पड़ता है, तो मुझे वास्तव में इस प्रतिक्रिया के साथ जाने के लिए एक स्पष्टीकरण चाहिए। साथ ही, जब आप कहते हैं "आपके लिए एसओएपी में आरईएसटी बदलता है" मुझे लगता है कि आप जेएसओएन को एसओएपी में परिवर्तित करना चाहते थे। क्या ये सही है? – senfo

+2

हाँ, स्पष्टीकरण भी चाहते हैं। यदि आप बस "नहीं" कहते हैं, तो मैं जानना चाहता हूं कि आप इसे आईफोन/एसओएपी समस्याओं के बारे में कुछ विशिष्ट जानकारी पर आधारित कर रहे हैं या नहीं। दूसरी तरफ, अगर यह सामान्य है, तो एसओएपी से बचने के सामान्य कारण, मैं Google को "एसओएपी बनाम रीस्ट" कर सकता हूं और उसमें से एक फायरहोज मुंह प्राप्त कर सकता हूं। –

4

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

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

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

+0

धन्यवाद, मैंने wsdl2objc का उपयोग करने की कोशिश की। डब्लूएसडीएल काम से ऑब्जेक्टिव सी कोड की पीढ़ी, लेकिन (जैसा कि अपेक्षित है) आईफोन एसडीके के खिलाफ सीधे संकलित नहीं है। मैंने सूत्रों को थोड़ा सा ट्विक करने की कोशिश की, लेकिन त्रुटियों के समूह के साथ समाप्त हो गया, मैं – Gero

7

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

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

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

+4

को हल नहीं कर सका? कोई दस्तावेज tnx – Spring

+2

मुझे रहस्यमय गैर-जवाब पसंद है। यह कैसे उखाड़ फेंका गया था? – gdbj

+0

@gdbj क्योंकि आरईएसटी और एसओएपी के बीच 1: 1 रूपांतरण आत्म-स्पष्टीकरण होना चाहिए ... –

1

आप एक उपकरण है जो मैंने पाया 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]; 
0

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

0

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

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() 
    }