Schnittstelle programmieren

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Schnittstelle programmieren

    Hallo,

    ich habe in den letzten Tagen viele Forenbeiträge gelesen, bin aber unsicher, ob ich für meine Aufgabe richtig vorgehe, und fühle mich deshalb etwas überfordert.

    Ich soll eine Schnittstelle programmieren:
    Eine Android-App, bei der es bereits eine lokale DB mit SQLite gibt, wird unter bestimmten Bedingungen Daten an einen Server mit einer SQL DB (Cloud-Nutzung ist nicht geplant) senden und Antwortdaten empfangen. Insert-Anweisungen liefern dabei z. B. die Insert-ID zurück. Es soll mit Streams und XML gearbeitet werden. Das HTTPS-Protokoll soll zum Einsatz kommen. Auf der Android-Seite liegen die Sendedaten als Objekte vor.

    Dort stelle ich mir vor, dass in einem asynchronen Thread
    • diese Objekte in einen Outputstream umgewandelt (Wie?) werden müssen,
    • dieser über eine HttpURLConnection mit POST an eine URL (Welche?) gesendet wird.
    • Dabei wird dann ein InputStream empfangen, in XML geparst und weiterverarbeitet.
    Mit steht Visual Studio 2015 zur Verfügung, und ich habe die Server-DB dort erstellt auf (localdb)\MSSQLLocalDB (mit SSDT/ SQL Server 2014 des VS).
    Als nächstes will ich ein Script für die Server-Seite schreiben, das Requests entgegennimmt, die Daten in der DB verarbeitet und ein Response zurückschickt.

    Ich habe Kenntnisse in VB und Java, würde aber auch, wenn notwendig, mich in anderes, z. B. PHP, einarbeiten.

    Mein Ansatz ist jetzt, im VS ein neues Projekt zu erstellen. Als Vorlage will ich Visual Basic, ASP.NET-Webanwendung, Web API wählen.
    Kann mir bitte jemand sagen, ob dieses Herangehen erst mal prinzipiell so richtig ist? Wie werden die gesendeten Daten validiert?

    Ich bin sehr dankbar für Hinweise auf Tutorials, die mir helfen können.
    API-Aktion aufrufen
    Hallo Leute,
    leider komme ich ohne Eure Hilfe mit der Schnittstelle nicht weiter.
    Ich habe inzwischen im VS ein Projekt, eine ASP.NET-Webanwendung/ Web API. Mit "Code First aus Datenbank" habe ich mir ein Model für die SQL-DB generiert und für die einzelnen Model-Klassen der Tabellen.
    Für eine Tabelle/Klasse Geraet, die neben ihrer ID nur ein String-Feld hat, habe ich einen Controller als "Wep API 2-Controller mit Aktionen unter Verwendung von Entity Framework" erstellt. Er liefert mir als System.Web.Http.ApiController GET/PUT/POST/DELETE Methoden sowie Dispose und GeraetExists.
    Z. B. habe ich die Methode:

    Quellcode

    1. ' POST: api/Geraets
    2. <ResponseType(GetType(Geraet))>
    3. Function PostGeraet(ByVal geraet As Geraet) As IHttpActionResult
    4. If Not ModelState.IsValid Then
    5. Return BadRequest(ModelState)
    6. End If
    7. db.Geraet.Add(geraet)
    8. db.SaveChanges()
    9. Return CreatedAtRoute("DefaultApi", New With {.id = geraet.id_geraet}, geraet)
    10. End Function


    In meiner Android-App möchte ich ein Geraet-Objekt neu in die DB schreiben und dessen ID zurückbekommen.
    Ich habe in einen asynchronen Thread und erhalte Fehler, sobald ich den OutputStream erzeuge:

    Quellcode

    1. InetAddress inet = null;
    2. String localHost = null;
    3. try
    4. inet = InetAddress.getLocalHost(); // liefert "localhost/127.0.0.1"
    5. localHost = InetAddress.getLocalHost().getHostName(); // liefert "localhost"
    6. url = new URL("http", localHost, 8080, "api/Geraets");
    7. urlConnection = (HttpURLConnection) url.openConnection();
    8. urlConnection.setRequestMethod( "POST" );
    9. urlConnection.setDoOutput(true);
    10. urlConnection.setChunkedStreamingMode(0); // stelle ich später auf genaue Größe ein
    11. outputStream = new BufferedOutputStream(urlConnection.getOutputStream());

    und an dieser Stelle springt er in den catch-Block:

    Quellcode

    1. } catch (IOException e) {
    2. ...

    Kann mir bitte jemand sagen, wie ich mich richtig verbinde? Vielen Dank im Voraus für jede Hilfe

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Bärbel R.“ ()

    Zum einen bitte den Code formatieren.
    Zum ist das mehr als unsauber hier irgendwelche Requests auf nen Controller durchzumurksen.
    Mach dir nen WebService, geht ganz leicht mit ASP.NET. Dieser hält sich an einen Standard welchen praktisch alle Programmiersprachen auch können bzw. es Frameworks dafür gibt.
    Android auf Java Basis kann das zu 10000% ebenfalls. Und dann hast du eine saubere Art und Weise das Teil aufzurufen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Vielen Dank für den Rat, thefiloe, und Entschuldigung wegen der fehlenden Formatierung. Musste gestern schnell weg und habe deshalb nur kopiert. Habe das aber heute gleich nachgeholt. Jetzt bin ich dabei, WebService auszuprobieren und das scheint gut zu gehen.
    Leider gibt es fast nur Tutorials zum DB-Zugriff für den WebService in C#. Oder hast Du da vielleicht noch einen Tipp für mich?
    Ist doch egal auf was du im Backend des WebServices zugreifst. Klar wird oft eine Datenbank verwendet, weil es halt im Großteil der Geschäftsszenarien vorkommt. Allerdings musst du ja nur den WebService bauen. Was du im Hintergrund machst ist komplett wurscht.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.