web-dev-qa-db-ja.com

iPhoneからSOAPサービスにアクセスする方法

IPhone用のアプリを開発する予定で、そのアプリはいくつかのSOAPサービスにアクセスする必要があります。 iPhone SDKで基本的なチェックを行っている間、SOAPサービスへのアクセスのサポートを見つけることができませんでしたが、少しのグーグルでSOAPのサポートがないという結論に至りました。 iPhone SDK。

そのため、このアプリを作成したい場合は、iPhoneからSOAPサービスにアクセスする方法を考え出す必要があります。最善のアプローチは何でしょうか?ベストプラクティスはありますか?誰かがiPhone SDKにある機能を使用してSOAPサービスにアクセスするためのライブラリをすでに作成しましたか?

(アクセスする必要があるサービスは別のパーティによって公開されており、SOAPとしてのみ公開しているため、残念ながら別のタイプのインターフェイスに切り替えるオプションはありません(例:RESTベースのAPI)。

下呂

224
Gero

一言:しないでください。

もちろん、それは本当の答えではありません。ただし、SOAPは引き続き避けてください。 ;-) iPhoneとWebサービスの間にプロキシサーバーを追加することはできますか?おそらく、あなたのためにRESTをSOAPに変換するものでしょうか?

あなたcouldを試してください CSOAP 、libxml2に依存するSOAPライブラリ( iPhone SDK)。

OSX用に独自の SOAPフレームワーク を作成しました。ただし、アクティブに維持されておらず、iPhoneに移植するのに時間がかかります(開始するにはNSXMLを TouchXML に置き換える必要があります)

52
schwa

私の解決策は、PHPを使用して、プロキシサーバーでRESTを受け入れ、SOAPリクエストを発行し、結果を返すことでした。

実装時間:15〜30分。

最もエレガントではありませんが、しっかりしています。

7
davidjhinson

私はこれまで、Objective-CからのSOAPスタイルの要求を時折行う必要性に対処するために、低レベル(XML生成および解析)で独自のアクセスをロールしました。とはいえ、SOAPClient( soapclient )というライブラリがあり、オープンソース(BSDライセンス)であり、Google Code( mac-soapclient )で利用できます。

APIを使用したことがない、またはAPIを使用したことがないため、その機能や有効性については証明しませんが、使用可能であり、ニーズに応じて迅速な解決策を提供する場合があります。

Appleはかつて、WS-MakeStubsと呼ばれる非常に壊れたユーティリティを持っていました。 iPhoneで利用できるとは思いませんが、それを置き換えるためのオープンソースライブラリに興味があるかもしれません。コードはSOAPクライアントと対話するためにObjective-Cを生成します。繰り返しますが、私はそれを使用していません-しかし、メモに書き留めました: wsdl2objc

4
heckj

SOAPサービス形式を使用してAPI呼び出しを実行するSwift 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()
    }
2
Tech

私が見つけたツールを使用して接続できます 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
Bennya

Ios_pluginの下のダウンロードパッケージに2つのiOSの例を含む gsoap をご覧ください。このツールは、WSDLをSOAPおよびXML RESTのコードに変換します。

0
Dr. Alex RE

こちらのリンク とそのロードマップをご覧ください。途中にRO | Cがあり、おそらくSOAPを含むWebサービスに接続できます(間違いなくVCLバージョンを使用しています)。

0
mj2008