Announcement

Collapse
No announcement yet.

Eigenen Webservice ind C# VS2008 Express nutzen

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

  • Eigenen Webservice ind C# VS2008 Express nutzen

    Ich habe in PHP mal testweise einen SOAP Webservice geschrieben der zwei zahlen addiert. Diesen kann ich auch mit PHP ohne Probleme nutzen.


    Weiter kann ich ihn auch als Webreferenz in Visual Studio 2008 express C# Importieren. Ich kann ein neues Objekt erzeugen und auch auf dessen Methoden zugreifen in der IDE.

    Code:
    soap.soapservice myService = new soap.soapservice();
    myService.addiere(10, 20);

    Alles wird im Editor sauber angezeigt. Rückgabewert und auch die Typen der Übergabeparameter.

    Wenn ich jetzt das Projekt Starte bekomme ich eine System.UriFormatException Außnahme.


    Hat da jemand eine Idee?

  • #2
    Bin einen Schritt weiter.
    Hatte im WSDL File unten die Zeile:
    <soap:address location="URL" />

    Auszufüllen.

    Hab den Service jetzt neu importiert und bekomme jetzt die Fehlermeldung HTTP Status 404:NotFound vom Aufruf der Methode ausgegeben.

    Comment


    • #3
      Und wieder ein Schritt

      Hatte einen Fehler im WSDL File.

      Jetzt bekomme ich keine Fehlermeldung mehr.
      Aber leider auch keinen Rückgabewert von der Funktion.

      Code:
      this.textBox3.Text = myService.addiere(10, 10);
      Gibt keinerlei Fehlermeldung aber auch keinen String zurück. Habe extra mal den Return des Servers auf den String TEST gesetzt geal was der Methode übergeben wird.

      Wo kann ich da ansetzen um herauszufinden wo mein Problem ligt.

      Comment


      • #4
        Hallo,

        kannst du den Webservice zB vom Browser aus mit HTTP-GET aufrufen um zu prüfen ob der WS die Daten richtig sendet?


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Wenn Du mir sagst wie ich das machen kann

          Entschuldige die Unwissenheit.

          Comment


          • #6
            Originally posted by StephanB View Post
            Wenn Du mir sagst wie ich das machen kann

            Entschuldige die Unwissenheit.
            Da ist es dann leichter wenn du das WSDL postest.


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Hab den Service mal mit dem Tool soapUI geprüft. Funktioniert dort einwandfrei.

              Hier mal das WSDL:

              http://pastebin.com/m55049f60

              Comment


              • #8
                Hier mal noch die Anfrage die das Tool aus der WSDL generiert:

                <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://symbicom.ag/soap/">
                <soapenv:Header/>
                <soapenv:Body>
                <soap:addiere>
                <soap:i1>10</soap:i1>
                <soap:i2>20</soap:i2>
                </soap:addiere>
                </soapenv:Body>
                </soapenv:Envelope>


                Die beiden Werte hab ich eingesetzt (10 und 20)

                Und die Antwort die mir das Tool anzeigt was der Server rückliefert:


                <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://symbicom.ag/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
                <SOAP-ENV:Body>
                <ns1:addiereResponse>
                <return xsi:type="xsd:int">30</return>
                </ns1:addiereResponse>
                </SOAP-ENV:Body>
                </SOAP-ENV:Envelope>

                Comment


                • #9
                  So wie ich da sehe ist der Rückgabetyp ein int.

                  Funktioniert das
                  Code:
                  this.textBox3.Text = myService.addiere(10, 10).ToString()
                  ?

                  Ist es sonst möglich dass ich den Webservice testen kann?
                  Bzw. kannst du eine Konsoleanwendung erstellen und dort den Webservice testen indem
                  Code:
                  Console.WriteLine(myService.addiere(10,20));
                  aufgerufen wird. Dann siehst du ob etwas zurückkommt.


                  mfG Gü
                  "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                  Comment


                  • #10
                    Der Webservice steht offen im Netz, kann also auch getestet werden.

                    Der Rückgabewert ist ein String:

                    <s:element minOccurs="1" maxOccurs="1" name="addiere" type="s:string" />

                    Wenn ich toString() anhänge bekomme ich eine Fehlermeldung.
                    Hab mal eine Consolenapplikation erstellt. Er gibt einfach kein Ergebnis aus.
                    Selbst wenn ich in der Serverfunktion einfach einen String zurückgebe.


                    Code:
                    using System;
                    using System.Collections.Generic;
                    using System.Linq;
                    using System.Text;
                    
                    namespace ConsoleApplication1
                    {
                        class Program
                        {
                            static void Main(string[] args)
                            {
                                soap.symbicom myService = new soap.symbicom();
                                Console.WriteLine(myService.addiere(10,20));
                                Console.ReadLine();
                            }
                        }
                    }

                    Comment


                    • #11
                      <return xsi:type="xsd:int">30</return>
                      Der Rückgabewert ist ein String:
                      Das finde ich interessanst obwohl du recht hast denn in der WSDL ist es auch als string definiert.


                      Der Webservice steht offen im Netz, kann also auch getestet werden.
                      Über welche URL kann ich den WS testen?



                      mfG Gü
                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                      Comment


                      • #12
                        http://symbicom.ag/soap/symbicom.wsdl

                        Ist der Pfad zur wsdl.

                        Ich habe jetzt extra mal bei dem PHP Server einen String an den Return gekettet.
                        Jetzt sollte "Return: <Ergebnis der Addition>" zurückgegeben werden.

                        Comment


                        • #13
                          Hab das Problem mal lokalisieren können.

                          Vom WS wird die korrekte Antwort geliefert allerdings in einem anderem XML als es der C#-Client Proxy erwartet. Dieser kann deshalb mit dem gesendeten XML nichts anfangen und gibt null zurück.

                          Soweit das Problem.
                          Die Lösung hab ich noch nicht gefunden außder es wird die Deserialisierung des XML der WS-Antwort selbst programmiert.
                          Dies wäre zwar möglich sollte aber nicht das Ideal darstellen.

                          Es schaut ganz so aus als ob PHP-Webservice und .net-Client nicht 100% kompatibel sind - trotz eines gemeinsamen Standards (WSDL).


                          mfG Gü
                          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                          Comment


                          • #14
                            Opps. Wenn man auch auf die zweite Seite umschaltent sieht man auch Antworten.

                            Das ist ja unschön... soviel zu standarts

                            Ich werde auch mal nach dieser Problematik googeln. Wenn wer einen Tipp hat wie ich das zum laufen bekomme dann immer her damit

                            Comment


                            • #15
                              Ich habe das ganze jetzt mal auf PHP Seite mit NuSopa für PHP5 umgesetzt und da funktioniert es. Warscheinlich ein Fehler in der Struktur des WSDL files. NuSopa erstellt das ja automatisch.

                              Comment

                              Working...
                              X