Webservice in C#

Johannes7146

Goldschnabel
Hallo zusammen,

ich habe bisher nur in Java Programmiert und versuche mich nun an meinem erstem (kleinem Übungs-) Projekt in C#.

Ich möchte diesen Webservice ansprechen.
Ich habe viele Beispiele und Howtos im Netz gefunden. Doch leider war in den meisten Fällen direkt der Server mit implementiert und eine art Stub-Objekt vorhanden.

In meinem fall habe ich aber nur die wsdl-Datei.
Hat jamend von euch ein Example oder Howto wie man nur auf Grundlage der WSDL Datei einen Webservice in C# anspricht.

Oder evtl ein paar Hinweise wie dort das generelle vorgehen in C# ist und welche Klassen benötigt werden.

Vielen Dank schonmal im Voraus für eure Hilfe.
 

Alexander Schuc

crazy-weasel
Hi.

Mit dem Tool wsdl kannst dir aus der wsdl-Datei automatisch einen Proxy für diesen Service generieren lassen.

Wenn du mit VisualStudio arbeitest, brauchst nur eine WebReferenz hinzufügen, geschieht dann automatisch im Hintergrund.

lg, Alex
 

Johannes7146

Goldschnabel
Die Funktion habe ich gearde auch gefunden. Vielen Dank für den Hinweis.
Habe zuvor nut mit Ecplise gearbeitet. Ist doch schon sehr ungewohnt am Anfang. Vorallem da man die Short-Cuts nicht mehr hat (bzw nicht kennt).

mal schauen wie weit ich nun komme.
 

Johannes7146

Goldschnabel
Aus der generierten Klasse habe ich nun folgendes erstellt...

Code:
....

ServiceReference1.detailsType bank = new WindowsFormsApplication1.ServiceReference1.detailsType();
                ServiceReference1.BLZServicePortTypeClient client = new WindowsFormsApplication1.ServiceReference1.BLZServicePortTypeClient();
                bank = client.getBank(textBox1.Text);
                
                string ausgabe = "Bezeichnung: " + bank.bezeichnung;
                ausgabe += "Ort: " + bank.ort;
                ausgabe += "Bic: " + bank.bic;
                ausgabe += "Plz: " + bank.plz;

                textBox2.Text = ausgabe;

....

Das ganze lässt sich compilieren und starten. Allerdings bricht er in der Zeile
Code:
ServiceReference1.BLZServicePortTypeClient client = new WindowsFormsApplication1.ServiceReference1.BLZServicePortTypeClient();
mit folgender Meldung ab:
Ein Endpunktkonfigurationsabschnitt für Vertrag "ServiceReference1.BLZServicePortType" konnte nicht geladen werden, da mehr als eine Endpunktkonfiguration für diesen Vertrag gefunden wurde. Geben Sie den bevorzugten Endpunktkonfigurationsabschnitt mit Namen an.

Ich werde aus dem Fehler nicht ganz schlau. Hat da jemand eine Idee?

ps: für Java gibt es hier bei Tutorials extra Tags. Gibt es die auch für C# ?

EDIT: Habe gesehen das man im Konstruktor auch einen String übergeben kann (Den Endpunkt) leider weiß ich nur immernoch nicht was damit gemeint sein könnte...
 
Zuletzt bearbeitet:

Alexander Schuc

crazy-weasel
Ich hab das mit dem Service mal kurz ausprobiert, und bin auf folgendes gestossen:

In der app.config sind, wie durch die Fehlermeldung schon angedeutet, 2 Endpunkte definiert worden.

Schaut in etwa so aus:

XML:
       <client>
            <endpoint address="http://www.thomas-bayer.com:80/axis2/services/BLZService"
                binding="basicHttpBinding" bindingConfiguration="BLZServiceSOAP11Binding"
                contract="ServiceTest.BLZServicePortType" name="BLZServiceSOAP11port_http" />
            <endpoint address="http://www.thomas-bayer.com:80/axis2/services/BLZService"
                binding="customBinding" bindingConfiguration="BLZServiceSOAP12Binding"
                contract="ServiceTest.BLZServicePortType" name="BLZServiceSOAP12port_http" />
        </client>

Du kannst jetzt entweder einen davon entfernen, sprich einfach eines der beiden client-Tags entfernen, oder du rufst den Konstruktor von BLZServicePortTypeClient mit einem der dortigen Namen auf.

C#:
ServiceReference1.BLZServicePortTypeClient client = new WindowsFormsApplication1.ServiceReference1.BLZServicePortTypeClient("BLZServiceSOAP11port_http");
ServiceReference1.detailsType bank = client.getBank(textBox1.Text);

Der Tag fürs c# Codefenster ist "csharp". ;)

lg,..
 
Zuletzt bearbeitet von einem Moderator:

Johannes7146

Goldschnabel
Vielen Dank.
Eine kurze Frage habe ich noch...hast du einfach alle Dateien nach einem Hinweis durchsucht die einen Endpunkt beinhalten oder kann man das irgendwo nachschauen.

Nun funktioniert es auf alle Fälle.
Vielen Dank nochmal für deine Hilfe.
 

Neue Beiträge