WinFuture-Forum.de: ASP.Net Core Rückgabe vs. ASP.NET Rückgabe - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

ASP.Net Core Rückgabe vs. ASP.NET Rückgabe JSON verhält sich anders?


#1 Mitglied ist offline   der dom 

  • Gruppe: aktive Mitglieder
  • Beiträge: 312
  • Beigetreten: 14. Juni 12
  • Reputation: 29

geschrieben 02. Mai 2019 - 18:29

Hi zusammen,

ich stehe vor einem Problem dass ich definitiv nicht verstehe.

Ich habe einen asmx Webservice auf einem IIS am laufen der mit einer Software auf dem Mac spricht und Datenbankeinträge zur Verfügung stellt bzw. auch wegschreibt.

Damit ich den IIS, für nichts anderes läuft der im Moment, abschalten kann wollte ich einen ASP.NET Core Service auf dem Raspberry Pi laufen lassen der mir den kleinen "Dienst" eben übernimmt. Jetzt wird es etwas seltsam weil ich das verhalten der beiden ASP.Net Varianten nicht ganz verstehe - mag auch sein, dass es dabei eher ein Problem des IIS ist.

Der IIS bzw. der ASMX Webservice liefert mir ein XML-Array mit den Einträgen zurück (im Browser) -> der Webservice liefert eine List<ObjectAusModel>.

In der Swift-App bekomme ich ein JSON Dictionary zurück - ich habe als Responsetype "Application/json" angegeben.

"{\"d\":[{\"__type\":\"
CTIWebService.tblCallings\",\"ID\":36,\"RemoteNumber\
":\"xxxxxxxxx\",\"RemoteName\":\
"xxxxxxx\",\"CallingDate\":\"\\
/Date(1556375134540)\\/\",\"Action\":\
"Wird angerufen...\"},{\"__type\":\"CTIWebService.
tblCallings\",\"ID\":35,\"RemoteNumber\
":\"xxxxxxxx\",\"RemoteName\":\"
xxxxxxx\",\"CallingDate\":\"\\/Date(1556373822273)\
\/\",\"Action\":\"Wird angerufen...\"}\\"



Der ASP.NET Core "Service liefert folgendes:

[{"id":0,"remoteNumber":"xxxxxx","remoteName"
:"Name unbekannt ","callingDate":"Protokoll","action":"Apr 19 2019 03:42:00:000PM"},{"id":0,"remoteNumber":"xxxxxxx"
,"remoteName":"Name unbekannt ","callingDate":"Protokoll","action":"Apr 19 2019 07:54:00:000PM"}



Hier mal die Codeschnippsel vom ASP.NET

  [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public List<tblCallings> GetCallings()
        {
            var retCallings = new DBQueries().Callings();
            this.Context.Response.ContentType = "application/json";
            //this.Context.Response.Write();
            return retCallings;
        }



und der vom ASP.NET Core

 [HttpGet]
       
        public List<CTIModel.tblCallings> Get()
        {
            this.HttpContext.Response.ContentType = "application/json";
   
            return database.GetCallings();
        }



Jetzt stellt sich mir die Frage - was kann ich machen damit die Ausgaben identisch sind?
Swift stellt sich quer beim konvertieren der ASP.NET Core Daten in ein NSDictionary weil es ein NSArray erhält.

Ich wollte jetzt ungern die gesamte App umschreiben bzw. die Methoden ändern.

Jemand eine Idee?


Achso hier noch der Swift-Schnipsel der das Konvertieren macht:

 func convertStringToDictionary(text: String) -> NSDictionary? {
        if let data = text.data(using: String.Encoding.utf8) {
            do {
                let result = try! JSONSerialization.jsonObject(with: data, options: [.allowFragments]) as! NSDictionary
                
                return result
            } catch let error as NSError {
                
                
                print(error)
                return nil
            }
        }
        return nil
    }


Mit allem, was du tust, machst du offenkundig, mit welcher Einstellung du durch's Leben gehst. -- Steffen Glückselig
0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.630
  • Beigetreten: 20. Juli 07
  • Reputation: 1.066

geschrieben 02. Mai 2019 - 20:33

Hm? Du meinst, Net Core schreibt JSON ordentlich und ASP.NET 4.x schreibt die Chose mit Escapes? :unsure:

Ich steh bestimmt grad auf dem Schlauch, aber zumindest NET4 kann zwischen Listen und Array hin- und herkonvertieren (IIRC steckt ToList<T>() als Extension in LINQ und ToArray<T>() als Methode von von List<T> in System.Collections.Generic, aber nagel mich nicht drauf fest).

Allerdings verwende ich bisher so gut wie kein NET Core, daher keine Ahnung, ob und ggfs. was es da für Eigenheiten gibt.

Was Du evtl machen könntest, wäre, per IIS eine Net Core Anwendung bereitstellen. Dann läßt sich zumindest ausschließen, daß die Plattform was damit zu tun hat (was ich persönlich nicht annehme, aber man weiß ja nie).
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   der dom 

  • Gruppe: aktive Mitglieder
  • Beiträge: 312
  • Beigetreten: 14. Juni 12
  • Reputation: 29

geschrieben 02. Mai 2019 - 20:41

Ahhh Ralph - du erwähnst etwas was ich nicht gesagt habe:

In dem ASMX Webservice hole ich die Daten per LINQ und nicht per "reiner" Query weil auch die ZielDB eine andere ist.

Der ASMX geht auf einen MSSQL und der andere Service auf einen MySQL bzw. MariaDB. Meinst du. DAS könnte natürlich ein Problem sein.

Ich brauch ja nur den Core Service deployen - dann sollte das passen - werde ich nachher mal ausprobieren.
Mit allem, was du tust, machst du offenkundig, mit welcher Einstellung du durch's Leben gehst. -- Steffen Glückselig
0

#4 Mitglied ist offline   der dom 

  • Gruppe: aktive Mitglieder
  • Beiträge: 312
  • Beigetreten: 14. Juni 12
  • Reputation: 29

geschrieben 03. Mai 2019 - 17:24

Also gerade den .Net Core Service gegen den IIS laufen lassen und ich erhalten das gleiche JSON Ergebnis wie auch auf dem MAC. Dagegen kann ich allerdings hier auch ein XML Format zurück geben lassen das, bis auf das Encoding gleich lautet wie bei dem eigentlichen ASMX Service.

Es kann theoretisch nur "noch" mit 2 Dingen zusammenhängen. Entweder der Rückgabewert des JSON Objekts ist anders weil aus dem .NET Core kein LINQ-generiertes Objekt zurückkommt - das wäre aber seltsam. Leider bekomme ich auch keine lauffähige Version mit einem MySQL Entity Zeugs hin. Der Schlotz will nicht laufen - weder bei Visual Studio 2017 auf Windows noch auf der 2019er Variante am Mac.

Oder es lieg daran, dass ich per ScriptMethod-Annotiation im ASMX noch mitteile, dass er ein JSON Object zurückgeben soll - das funktioniert aber im .NET Core nicht weil die Assembly keine Core-Assembly ist und nicht geladen werden kann :-(.

Ich glaube, ich baue mir dann einfach doch eine andere .NET Core Applikation die das anders handhabt und lese die Daten anderweitig in der MacApp aus. Ist zwar doof - aber das jetzt ans Laufen zu bekommen oder darauf zu warten das die System.Web.Extensions.dll auf das Core Model portiert wird ist mir dann doch zu blöde.
Mit allem, was du tust, machst du offenkundig, mit welcher Einstellung du durch's Leben gehst. -- Steffen Glückselig
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0