Announcement

Collapse
No announcement yet.

WebService ohne WSDL nutzen

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

  • WebService ohne WSDL nutzen

    Hallo zusammen,

    ich bin derzeit dabei, eine OpenSource Bibliothek für Fritz!Box-Router zu schreiben, um die diversen angebotenen Funktionen zu nutzen. Soweit habe ich mittlerweile auch einen funktionierenden "Prototyp", würde das ganze aber jetzt mehr .NET-Like implementieren wollen.

    Während ich momentan den SOAP-Header wie auch den Request manuell generiere und via Netzwerk versende usw., möchte ich zukünftig das ganze gerne über vorhandene WebService bzw. SOAP-Funktionen abbilden, die das .NET-Framework mitbringt. Problem ist, dass die FritzBoxen keine WSDL-Dateien liefern sondern nur sogenannte SCPD-Dateien. Die beschreiben zwar auch, was an Funktionen angeboten wird, an Parameter benötigt wird und Werten zurückgeliefert wird, hierfür müsste man aber erst einen Parser schreiben, der eine WSDL-Datei daraus baut.
    Im ersten Schritt würde ich gerne erst mal eine funktionierende Kommunikation aufbauen, im zweiten dann einen SCPD2WSDL Parser.

    Meine Frage wäre nun:
    Wie kann ich die WebService-Funktionen ansprechen ohne dass ich mein VB.NET mit einer WSDL-Datei füttern muss? Name wie auch Parameter usw sind mir bekannt, so das ich recht "Zielsicher" die entsprechenden Funktionen ansprechen könnte.

    Mein erster "Querschuss" ist unter http://www.ip-phone-forum.de/showthread.php?t=190718 zu finden.

    Bin für jeden Tipp und jede Hilfe dankbar!

    prodigy7

  • #2
    Guten Abend.
    Leider bin ich weder sonderlich geübt im Umgang mit der WCF, noch habe ich großartig Kenntnisse über verwendete Technologien. Aber ich hoffe dennoch helfen zu können:

    Soweit ich das jetzt verstanden habe, möchtest du eine, von einem Webservice bereitgestellte, Methode aufrufen, ohne eine Proxyklasse generieren zu lassen?

    Ich habe dazu folgendes:

    [highlight=c#]

    using System;
    using System.ServiceModel;
    using System.ServiceModel.Channels;

    public class MyClass
    {
    public static void RunSnippet()
    {
    BasicHttpBinding bind = new BasicHttpBinding();
    EndpointAddress adress = new EndpointAddress("http://somewhere:XXXX/etc.svc");
    ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(bind, adress);

    IRequestChannel channel = factory.CreateChannel();
    channel.Open();

    // Oder Soap12 or something like that..
    Message request = Message.CreateMessage(MessageVersion.Soap11,"http:// ... ");

    Message reply = channel.Request(request); // Viel Spaß damit

    reply.Close();
    channel.Close();
    factory.Close();
    }

    public static void Main()
    {
    try
    {
    RunSnippet();
    }
    catch (Exception e)
    {
    string error = string.Format("---\nThe following error occurred while executing the snippet:\n{0}\n---", e.ToString());
    Console.WriteLine(error);
    }
    finally
    {
    Console.Write("Press any key to continue...");
    Console.ReadKey();
    }
    }
    }

    [/highlight]

    Hoffe dir (oder anderen - ist ja schon ein wenig her) geholfen zu haben.

    Mfg Myst

    Comment


    • #3
      Du sendest eine SOAP -Message und bekommst die Antwort. Wie wird jetzt der Webservice genutzt?
      Christian

      Comment

      Working...
      X