Код ошибки 400 при использовании службы svc в ios с использованием swift

Я звоню в службу следующим образом, используя swift в ios. Мой сервис отлично работает с версией для Android, но когда я пытаюсь заставить его работать с ios, он всегда возвращает код ошибки 400

ниже приведен код версии ios

 var soapMessage = "<?xml version='1.0' encoding='UTF-16'?><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><GetAirports xmlns='http://groundspan.com/groundspan'/></soap:Body></soap:Envelope>"

   // var urlString = "http://example.com/myeservice.svc"
    var urlString = "http://example.com/myservice.svc?"
    var nameSpace = "http://example.com/service"
    var methodNam = "GetAirports"
    var msgLength = String(countElements(soapMessage))
    var url = NSURL(string: urlString)!
    println("Url : \(url)")
    var theRequest = NSMutableURLRequest(URL: url)
    theRequest.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
    theRequest.addValue(msgLength, forHTTPHeaderField: "Content-Length")
    theRequest.addValue("http://example.com/service/IGroundSpanProcessorService/\(methodNam)", forHTTPHeaderField: "SOAPAction")
    theRequest.HTTPMethod = "POST"
    theRequest.HTTPBody = soapMessage.dataUsingEncoding(NSUTF16StringEncoding, allowLossyConversion: false)


    var connection = NSURLConnection(request: theRequest, delegate: self, startImmediately: true)
    connection?.start()

    if (connection == true) {
        var mutableData : Void = NSMutableData.initialize()
    }else{
        println("Error in connection")
    }

он всегда переходит в другой блок соединения и ошибку пять в соединении, а также получает код ошибки 400 ошибка.

Пожалуйста, помогите мне.

3 ответа

Я не уверен, почему это происходит внутри блока "Ошибка в соединении", однако несколько дней назад мне пришлось иметь дело с ошибкой 400 Bad Request (я думаю, что это означает, что один). Во-первых, вы должны использовать сниффер, например Wireshark (я также видел, что Fiddler часто здесь рекомендует), чтобы проверить сообщение, которое вы отправляете, и то, что вы получаете с сервера. Это может помочь вам увидеть, если вы получаете какую-то ошибку, которую WCF не анализирует автоматически.

Ниже ответ на мой вопрос

var soapMessage = "<?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><GetAirports xmlns='http://example.com/example'/></soap:Body></soap:Envelope>"

    var urlString = "http://example.com/GroundSpanProcessorService.svc"

    var msgLength = String(countElements(soapMessage))
    var url = NSURL(string: urlString)!

    var theRequest = NSMutableURLRequest(URL: url)
    theRequest.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
    theRequest.addValue("http://example.com/example/IGroundSpanProcessorService/GetAirports", forHTTPHeaderField: "Soapaction")
    theRequest.addValue(msgLength, forHTTPHeaderField: "Content-Length")

    theRequest.HTTPMethod = "POST"
    theRequest.HTTPBody = soapMessage.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)


    var connection = NSURLConnection(request: theRequest, delegate: self,startImmediately: true)
    connection?.start()

    if (connection == true) {
        println("Connection success")
        var mutableData : Void = NSMutableData.initialize()
    }else{
        println("Error in connection")
    }

Окончательное решение - сначала идеально отобразить конверт с мылом, а затем разобрать wsdl.

var is_SoapMessage: String = "http://www.w3.org/2001/XMLSchema-instance 'xmlns: xsd =' http://www.w3.org/2001/XMLSchema'xmlns: soap =' http://schemas.xmlsoap.org/soap/envelope/'> http://tempuri.org/'> "

var myelement :String = ""
var elementValue: String?
var success = false
var array_string = [String]()


// on click 


    var is_URL: String =  "http://assetwebservice.sudesi.in/service.svc"

    var lobj_Request = NSMutableURLRequest(URL: NSURL(string: is_URL)!)
    var session = NSURLSession.sharedSession()
    var err: NSError?

    lobj_Request.HTTPMethod = "POST"
    lobj_Request.HTTPBody = is_SoapMessage.dataUsingEncoding(NSUTF8StringEncoding)

    lobj_Request.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
    lobj_Request.addValue(String(count(is_SoapMessage)), forHTTPHeaderField: "Content-Length")
    //lobj_Request.addValue("223", forHTTPHeaderField: "Content-Length")
    lobj_Request.addValue("http://tempuri.org/IService/BindCategory", forHTTPHeaderField: "SOAPAction")

    var task = session.dataTaskWithRequest(lobj_Request, completionHandler: {data, response, error -> Void in



    var strData = NSString(data: data, encoding: NSUTF8StringEncoding)

      //  println("Body:---- \(strData)")
        let parser = NSXMLParser(data: data)
        parser.delegate = self
        parser.parse()

                          // Just in case, if there's an error, report it. (We don't want
        if error != nil
        {
            println("Error: " + error.description)
        }

    })
    task.resume()

}


func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {

    println("first case ")
    println(elementName)

    if elementName == "GetDataResponse" {
        elementValue = String()
    }

}

func parser(parser: NSXMLParser, foundCharacters string: String?) {


   println("second  case ")
    array_string.append(string!)
    anstext.text = string


   println(string)

    if elementValue != nil {

        println("come in this part ")
        elementValue! += string!
        array_string.append(elementValue!)


    }
    println((array_string.count))




}

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?
    ) {

        println("third case ")


    if elementName == "GetDataResponse" {

        if elementValue == "true" {
            success = true
                      // println("this is right answer ")

вывести результат здесь} elementValue = nil } }

Спасибо тогда получите результат

Другие вопросы по тегам