如何使用带有Delegate方法的NSURLSession连接到Web服务?

时间:2014-11-17 03:00:16

标签: ios xcode web-services swift nsurlsession

我正在尝试连接iOS中的Web服务,但我遇到了很多问题。我在这里找到了一个练习网络服务 - http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit

我到目前为止已编写此代码

    let soapMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
    "<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/\">\n"
    "<soap:Body>\n"
    "<CelsiusToFahrenheit xmlns=\"http://www.w3schools.com/webservices/\">\n"
    "<Celsius>50</Celsius>\n"
    "</CelsiusToFahrenheit>\n"
    "</soap:Body>\n"
    "</soap:Envelope>\n"

    let url = NSURL(string: "http://w3schools.com/webservices/tempconvert.asmx")!

    var request = NSMutableURLRequest(URL: url)

    let messageLength = "\(soapMessage.utf16Count)"
    NSLog("\(messageLength)")
    request.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
    request.addValue("http://www.w3schools.com/webservices/CelsiusToFahrenheit", forHTTPHeaderField: "SOAPAction")
    request.addValue(messageLength, forHTTPHeaderField: "Content-Length")
    request.HTTPMethod = "POST"
    request.HTTPBody = soapMessage.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

    var urlSession: NSURLSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: self, delegateQueue: NSOperationQueue.mainQueue())

它可以连接,但我的响应回复为text / html而不是text / xml。我的问题是它为什么不正确地返回?我也使用NSURLSessionDataTask或NSURLSessionDownloadTask?

1 个答案:

答案 0 :(得分:0)

对于你的情况,我认为它的NSURLSessionDataTask。基于此网站:http://www.kaleidosblog.com/nsurlsession-in-swift-get-and-post-data