Announcement

Collapse
No announcement yet.

HTTP POST Anfrage an (Apache)Webservice in C#

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

  • HTTP POST Anfrage an (Apache)Webservice in C#

    Hallo,
    Ich möchte in C# eine Anfrage an einen (fremdem) Apache-Server schicken.
    Eine einfache HTTP-Get Anfrage kriege ich hin, der Webservice will aber POST.
    Ich habe nur die nachfolgende Struktur zur Verfügung:
    ************************************************
    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema"
    xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">

    <SOAP-ENV:Body>
    <requestHorsSpecification xmlns="http://www.xxx.com/yyy"
    version="01.03.00" refSchema="vehicleSpecification.xsd">
    <HorseIdentification PARA1="AB12345" />
    <language>de-DE</language>
    <PARA2="12345" />
    </requestHorsSpecification>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    ************************************************** *
    Laut Schema sind zwei Parameter (PARA1 und PARA2) Pflichtfelder, damit ich überhaupt eine Antwort erhalten soll.

    Wie kann ich C# dazu bringen, den Aufruf zu verschicken und wie kann ich die Antwort auslesen.
    Vielleicht kann mir jemand wenigstens die Struktur der Lösung sagen.
    Vielen Dank aus München

  • #2
    Hallo,

    bei der Implementierung eines Web Services stehen prinzipiell zwei verschiedene Wege zur Verfügung:
    1. REST (Representational State Transfert)
    2. SOAP (Simple Object Access Protocol)

    Der REST-Weg entspricht vom Aufbau her der bisherigen Arbeitsweise beim Abfordern von Ressourcen vom Webserver, da alle benötigten Daten in der Aufruf-URL kodiert (CGI-Parameter) werden.
    Der SOAP-Weg verfolgt einen anderen Grundansatz, da die Daten in einem XML-Umschlag verpackt transportiert werden. Mit Hilfe von WSDL (Web Services Description Language) wird für den Client eine Proxy-Klasse angelegt, die zum Aufruf der Informationen zu verwenden ist. Bei einem Methodenaufruf werden die Eingabeparameter ini einem SOAP Envelope verpackt und mittels HTTP zum Webserver geschickt. Der aufgerufene Web Service liefert das Ergebnis im gleichen Format verpackt zurück.

    Wie kann ich C# dazu bringen, den Aufruf zu verschicken und wie kann ich die Antwort auslesen.
    Da der Web Service die SOAP-Implementierung nutzt, muss der C#-Client über Visual Studio eine Verweis auf den Webservice einbinden (hinter den Kulissen ruft VS die WSDL-Beschreibung des Webservice ab, um die C#-Proxyklasse zu generieren). Ab dann greift der Client direkt auf die Proxy-Klasse zu, ohne mit dem konkreten HTTP-Inhalt in Berührung zu kommen.

    Comment


    • #3
      Vielen Dank, jetzt weiss ich wenigstens den Weg. Ob er begehbar ist, muss ich versuchen
      Ich habe nur die xsd-Schemen. Ich kann leider keinen Webverweis einbinden, da ich nur die Atwort:"Das HTML-Dokument enthält keine Webdienst-Suchinformationen." erhalte.
      Bei Webservices, die ich im VS erstelle, funktioniert alles.
      Kann ich also anhand der xsd eine wsdl-Beschreibung erstellen, damit der Proxy funktioniert?

      Comment


      • #4
        Hallo,

        Kann ich also anhand der xsd eine wsdl-Beschreibung erstellen, damit der Proxy funktioniert?
        ich habe das zwar noch niemals selbst ausprobieren müssen, aber die Beschreibung des .NET Framework-Tools WSDL.EXE deutet darauf hin, dass auch ein XML-Schema als Input zulässig ist:

        Code:
        C:\Temp>wsdl /?
        Microsoft (R) Web Services Description Language Utility
        [Microsoft (R) .NET Framework, Version 2.0.50727.42]
        Copyright (C) Microsoft Corporation. All rights reserved.
        
        wsdl.exe -
            Utility to generate code for xml web service clients and xml web services
            using ASP.NET from WSDL contract files, XSD schemas and .discomap
            discovery documents. This tool can be used in conjunction with disco.exe.
        Normalerweise verwendet man eine .wsdl-Datei als Input:

        wsdl /language:CS /out:OSFirstWSStub.cs OSFirstWS.wsdl

        Ein Versuch mit einer .xsd ist es wert.

        Comment


        • #5
          xml-xsd ist möglich

          langsam komme ich drauf
          ein xsd ist möglich-auch ein xml-file, welches aber zuvor (mit xsd.exe) in xsd konvertiert werden muß.
          Es kommen zwar momentan bei der Konvertierung xsd->Proxyklasse.cs Fehlermeldungen, die hängen aber mit der xsd-Datei selbst zusammen
          vielen Dank

          Comment

          Working...
          X