Swift - asmx Request

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Swift - asmx Request

    Hallo,

    ich bin vollkommen neu in Sachen Swift und Xcode. Ich möchte eine einfache Login Page erstellen und die Eingabe
    gegen meine Datenbank prüfen. Eingabema View ist fertig. asmx Webservice in c# ist fertig unf funktioniert auch. Habe
    es auch über Safari geteset.

    Wenn ich nun aber beim Login diesen aufrufen möchte, funktioniert das leide rnicht.

    Quellcode

    1. let urlS = URL(string: "https://bla.bla.at?kundeS=Test&userS=Test&passwS=Test")!
    2. URLSession.shared.dataTask(with: urlS, completionHandler: {(data, response, error) in
    3. guard let data = data, errror == nil else { print(error!); return}
    Was schon komisch ist, der Parameter kundeS darf keine Leerzeichen enthalten, ansonste ist urlS = nil
    Avber Zeile 3 und 4 führt immer zum resume am Ende. Und _reserved = (void *) NULL ???

    Wasrum geht das nicht, bzw. wie kann ich den Fehler überhaupt finden. Wenn man aus der Microsoft Welt kommt
    ist Swift und XCode schon sehr gewöhnungsbedürftig.

    Vielen Dank
    lg
    WW
  • WiglWagl schrieb:

    Was schon komisch ist, der Parameter kundeS darf keine Leerzeichen enthalten, ansonste ist urlS = nil
    Nee, so wie Du das hingeschrieben passt das schon, dass kundeS keine Leerzeichen haben darf, da das ja encoded ist. Google mal nach http da werden die verschiedenen Arten von Requests, URL-Encoding, Daten im Header/Body usw. erklärt. Wenn Du diese Grundlagen beherrschst, dann sollte das klarer sein, was Du machen möchtest.
  • WiglWagl schrieb:

    da man im XCode keine brauchbaren Fehlermeldungen bekommt, ist das unheimlich schwierig.
    ... Vielleicht bin ich da auch nur etwas anders als alle Anderen, aber ich bekomme brauchbare Fehlermeldungen.
    Du kannst dir ja sämtliche Schritte ausgeben, mit Breakpoints Schritt für Schritt durch deinen Code gehen und bist eigentlich selten von XCode alleine gelassen...

    Wenn man da mit zB. C arbeitet, is das etwas gaaanz anderes...
  • Ahaj spannend und wo sollen diese Fehlermeldungen sein? Ich arbeite mit Breakpoints und habe genau in der ersten Zeile oben
    einen und die Zeilen danach verursachen ein Fehler , offenabr, weil ein kompletter Codeblock übersprungen wird, aber warum und
    wieso ist nicht ersichtlich.
    Hier ist Visual Studio schon um welten einfacher und besser muss ich sagen.
  • Also die Fehlerbeschreibung „funktioniert das leide rnicht“ hilft uns jetzt nicht wirklich, dir bei deinem Problem zu helfen. Was funktioniert denn nicht bzw. was erwartest du und was passiert? Bringt Xcode eine Fehlermeldung oder wird in deinem guard-Statement der else-Teil aufgerufen und ein Fehler ausgegeben?

    Sollte dein Code ohne Fehler durchlaufen, dann steht eben der Rückgabewert der Webseite in der Konstante data und den kannst du dann nach guard auswerten.

    Wobei, wenn ich es mir genauer ansehe, dann fehlt da doch ein resume(). Dein Task wird so gar nicht aufgerufen. Auch ist ein errror Falsch geschrieben. Das müsste eher so aussehen:

    Quellcode

    1. if let urlS = URL(string: "https://bla.bla.at?kundeS=Test&userS=Test&passwS=Test") {
    2. let task = URLSession.shared.dataTask(with: urlS) { (data, response, error) in
    3. guard let data = data, error == nil else {
    4. debugPrint("Fehler beim Laden von \(urlS)", String(describing: error))
    5. return
    6. }
    7. debugPrint(String(data: data, encoding: .utf8) ?? "keine Daten")
    8. }
    9. task.resume()
    10. } else {
    11. print("URL fehlerhaft")
    12. }
    Alles anzeigen
    So Long, and Thanks for All the Fish.
  • Hier der komplette Code:

    Quellcode

    1. struct Class: Codable {
    2. let id: String
    3. let mail: String
    4. let host: String
    5. let mandant: String
    6. let prefix: String
    7. let rolle: String
    8. let pword: String
    9. }
    10. let urlS = URL(string: "https://gupha.justsell.at/AppConncetor.asmx/AppConnWorker?kundeS=_gu&userS=Rene&passwS=Rene")!
    11. URLSession.shared.dataTask(with: urlS, completionHandler: {(data, response, error) in
    12. guard let data = data, error == nil else { print(error!); return}
    13. let decoder = JSONDecoder()
    14. let classes = try! decoder.decode([Class].self, from: data)
    15. for myClass in classes {
    16. print(myClass.id)
    17. print(myClass.mail)
    18. print(myClass.host)
    19. }
    20. }).resume()
    Alles anzeigen

    Die Zeile 11/12 springt direkt zu Teile 20, ohne das ich einen FEhler sehen kann. Die URL funktioniert jetzt gerade nicht, da die Domain umzieht, ist aber richtig.
    Ich erwarte, dass es in Zeile 13 weitergeht. Da ich aber keine Fehlermeldung sehe, weiß ich nicht warum. Bedeutet für mich, irgendwas in Zeile 11 und 12 stimmt nicht.
    und hier stehe ich an.

    danke
  • Hallo,

    muss das noch mal öffnen. Also SSL ist nun soweit in Ordnung und der Request tut auch was, aber es kommt nie retour.
    Der Link ist aber zu 100% korrekt und funktioniert auch. Arbeite hier mit einer Testdatenbank, daher auch der Plaintext


    Quellcode

    1. struct Class: Codable {
    2. let id: Int
    3. let namer: String
    4. let mail: String
    5. let host: String
    6. let mandant: String
    7. let prefix: String
    8. let rolle: String
    9. let pword: String
    10. }
    11. let urlS = URL(string: "https://gupha.justsell.at/AppConncetor.asmx/AppConnWorker?kundeS=_gu&userS=Rene&passwS=Rene")!
    12. URLSession.shared.dataTask(with: urlS, completionHandler: {(data, response, error) in
    13. guard let data = data, error == nil else { print(error!); return}
    14. let decoder = JSONDecoder()
    15. let classes = try! decoder.decode([Class].self, from: data)
    16. for myClass in classes {
    17. print(myClass.id)
    18. print(myClass.mail)
    19. print(myClass.host)
    20. }
    21. }).resume()
    Alles anzeigen
    Fehler:

    basBusinessApp/ContentView.swift:89: Fatal error: 'try!' expression unexpectedly raised an error: Swift.DecodingError.typeMismatch(Swift.Array<Any>, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Array<Any> but found a dictionary instead.", underlyingError: nil))
    2022-10-03 08:31:45.160129+0200 abasBusinessApp[16422:324588] abasBusinessApp/ContentView.swift:89: Fatal error: 'try!' expression unexpectedly raised an error: Swift.DecodingError.typeMismatch(Swift.Array<Any>, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Array<Any> but found a dictionary instead.", underlyingError: nil))

    Aber wieso?

    Danke
    lg
  • Der Fehler steht doch da:
    Expected to decode Array<Any> but found a dictionary instead.
    Es wird ein Array im JSON erwartet aber ein Dictionary ist drin. Vermutlich sieht dein JSON so aus:

    Quellcode

    1. { id: 0815, namer: "…", … }
    … muss aber so aussehen:

    Quellcode

    1. [
    2. { id: 0815, namer: "…", … }
    3. ]
    So Long, and Thanks for All the Fish.