2015-02-13 3 views
2

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

ниже код 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 ошибку.

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

ответ

0

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

+0

если (соединение! = Ноль) { } решить мою проблему собирается в еще блоке и также смотрите ниже ответ, который решал ошибку 400 – Pinakin

0

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

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") 
    } 
0

Окончательное решение сначала карта мыла конверт прекрасно затем разобрать WSDL

вар is_SoapMessage: String = «http://www.w3.org/2001/XMLSchema инстанции 'XMLNS: XSD =' http://www.w3.org/2001/XMLSchema 'Xmlns: мыло =' 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 = ноль } }

Благодаря затем получить результат