How do I call a SOAP web service in Swift 2?

前端 未结 1 864
小蘑菇
小蘑菇 2021-01-22 04:17

I want to call web service for Swift 2. But it never works. This is my code.

import UIKit

class ViewController: UIViewController, UITextFieldDelegate, NSURLConn         


        
相关标签:
1条回答
  • 2021-01-22 04:54

    NSURLConnection is deprecated, use NSURLSession instead.

    Here's an example of a function doing what you want with NSURLSession and a callback:

    func getFarenheit(celsius celsius: Int, completion: (result: String) -> Void) {
        let soapMessage = "<?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.w3schools.com/xml/'><Celsius>\(celsius)</Celsius></CelsiusToFahrenheit></soap:Body></soap:Envelope>"
        let urlString = "http://www.w3schools.com/xml/tempconvert.asmx"
        if let url = NSURL(string: urlString) {
            let theRequest = NSMutableURLRequest(URL: url)
            theRequest.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
            theRequest.addValue((soapMessage), forHTTPHeaderField: "Content-Length")
            theRequest.HTTPMethod = "POST"
            theRequest.HTTPBody = soapMessage.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
            NSURLSession.sharedSession().dataTaskWithRequest(theRequest) { (data, response, error) in
                if error == nil {
                    if let data = data, result = String(data: data, encoding: NSUTF8StringEncoding) {
                        completion(result: result)
                    }
                } else {
                    print(error!.debugDescription)
                }
            }.resume()
        }
    }
    

    Use it like this with a "trailing closure":

    getFarenheit(celsius: 42) { (result) in
        print(result)
    }
    

    It prints the data containing the XML and the converted value:

    <?xml version="1.0" encoding="utf-8"?><soap:Envelope 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:Body><CelsiusToFahrenheitResponse xmlns="http://www.w3schools.com/xml/"><CelsiusToFahrenheitResult>107.6</CelsiusToFahrenheitResult></CelsiusToFahrenheitResponse></soap:Body></soap:Envelope>

    0 讨论(0)
提交回复
热议问题