Announcement

Collapse
No announcement yet.

Webservice: Wie rufe ich eine Methode mit Parametern auf?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Webservice: Wie rufe ich eine Methode mit Parametern auf?

    Hallo zusammen,

    ich stehe mal wieder völlig auf dem Schlauch.
    Ich habe einen kleinen WebService mit .net3.5 erstellt, der Daten aus einer Datenbank lesen und zurückgeben kann. Dies macht er, so hoffe ich, im Json-Format. Ich kann den WebService aus VS2012 heraus starten, bekomme dann eine Übersicht der Methoden und kann davon eine Auswählen und auf der folgenden Seite die entsprechenden Parameter (zb. name und passwort) eingeben. Gleiches gilt, wenn ich den Service Veröffentliche und in den IIS einbinde und dann im Browser aufrufe.

    Jetzt hab ich ein Probleme.
    Ich habe mir einen Client gebastelt, der in einer RichTextBox den vom Service zurück gegebenen Json-String anzeigen soll.
    Ich schaffe es aber nicht, den WebService richtig anzusprechen.


    So sieht mein WebService aus:
    [highlight=c#]
    [System.Web.Script.Services.ScriptService]
    public class MyWebService : WebService
    {
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
    public string Login(string name, string pw)
    {
    string json = Daten.Login(name, pw);
    return json;
    }
    }

    [/highlight]


    Und so der Versuch ihn vom Client aus anzusprechen:
    [highlight=c#]
    private void button1_Click(object sender, EventArgs e)
    {
    string text = "";
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:59400/MyWebService.asmx?Login&name=am&pw=test");
    request.Method = WebRequestMethods.Http.Get;
    request.Accept = "application/json";
    WebResponse response = request.GetResponse();


    using (var sr = new StreamReader(response.GetResponseStream()))
    {
    text = sr.ReadToEnd();
    }


    richTextBox1.Text = text;
    }

    [/highlight]

    Kann mir da jemand helfen? Das macht mich ganz wahnsinnig.

  • #2
    Funktioniert das den so äquivalent ohne Parameter? Also sind die Parameter überhaput das Problem?
    Wenn ich das richtig in Erinnerung habe ist Get bei ASP.Net Webservices erstmal nicht erlaubt.

    Comment


    • #3
      Gerade wenn du sowieso auf JSON gehst würde ich das ASP.NET WebApi Framework verwenden. Danach würde ich die URL einfach im Browser aufrufen oder per Postman (Google Chrome Plugin) im Falle eines JSON Services. Dort siehst Du am Besten ob der Client nicht funktioniert und was Dir der Server als Antwort schickt.

      Hier noch ein Link zu einem kleinen Tutorial zu ASP.NET Web Api: http://www.asp.net/web-api/overview/...-first-web-api

      Comment


      • #4
        M.E. der faslche Weg. Sinn eines Webservices ist es ja, über diesen die Schnittstelle zu bekommen und dann eben direkt keinen Request mehr auszuführen, sondern die generierte Klasse und ihre Methode. hier müsst das Login sein

        http://support.microsoft.com/kb/308359

        Siehe hier aufruf von
        myMathService.Add(2,4)
        Christian

        Comment


        • #5
          Hallo und danke für die schnelle Hilfe.
          Den Webservice möchte ich nur ungerne wieder verändern. An sich funktioniert er ja, ich weiß nur nicht, ob er wirklich reines Json zurück gibt, oder wie, wenn er im Browser ausgeführt wird, dies mit XML-Tags umschließt.
          Der Weg über den Webdienstverweis ist klasse, aber ich bezweifle, dass dies auch außerhalb von .net funktioniert. Der Client den ich mir basteln will, ist nur für mich zum testen. Der "echte" Client wird eine App auf dem iPad sein. Kommt dort irgendwas mit XML-, oder HTML-Tags an, kann die App dies nicht weiterverarbeiten und schmiert ab. Auf die Erstellung der App habe ich keinen Einfluss, sondern ich bekomme nur gesagt, was der WebService liefern muss.

          Comment


          • #6
            ?? Ein Webservice hat primär nichts mit HTML, XML,JSON o.a. zu tun. Über eine WSDL wird beschrieben, wie der Webservice funktioniert.
            Jeder kann nun dies WSDL lesen und den Service nutzen. Die meisten IDEs lesen die WSDL und erzeugen die benötigten Klassen automatisch. Diese können dann von der Anwendung direkt genutzt werden. Lt. deinem Beitrag willst du diese unter C# nutzen. Also solltest du die Klassen erzeugen und nutzen.
            Letztlich, da er über meist (muss er aber nicht) HTTP läuft kann ein Webservice auch vom Browser genutzt werden. Das stellt aber kein Zwang oder ausschließliche Nutzung dar.
            Vielmehr verzicht man eigentlich in diesem Bereich einen Webservice zu erstellen, da eben Javascript nicht die WSDL direkt nutzen kann. Hier eine Implementation
            http://cxf.apache.org/docs/wsdl-to-javascript.html

            Man erstellt eine serverseitige Anwendung, die per HTTP auf einen Request antwortet. Um größtmögliche Flexibilität zu haben benutzt man clientseitig per Javascript AJAX um einen asynchronen Request abzusetzen. Das ist dann kein Webservice, sondern eine ganz normale Webanwendung

            Der Client den ich mir basteln will, ist nur für mich zum testen. Der "echte" Client wird eine App auf dem iPad sein. Kommt dort irgendwas mit XML-, oder HTML-Tags an, kann die App dies nicht weiterverarbeiten und schmiert ab. Auf die Erstellung der App habe ich keinen Einfluss, sondern ich bekomme nur gesagt, was der WebService liefern muss.
            Es scheint, dass du keinen Webservice erstellen solltest, sondern eine Webanwendung. Wenn die Clients eben keine Webservice nutzen können, dann sollte es auch keiner sein. Deine Webanwendung kann an die Clients das gewünscht zurückgeben (kein HTML, kein XML)
            Zuletzt editiert von Christian Marquardt; 06.09.2013, 16:13.
            Christian

            Comment

            Working...
            X