IP-Symcom, Soap, Visual C# 2008

Hallo,

ich habe folgendes Problem und benötige dringend Hilfe.

Ich möchte meine Hausautomation über Visual Studio 2008 (C#) realisieren. Dazu möchte über die SOAP-Schnittstelle meine Geräte (FS20 und HomeMatic), die ich in IP-Symcon V2.0 definiert habe, steuern.

In meinem Projekt habe ich die 3 folgenden Service-Referenzen hinzugefügt:

  • IIPSFS20
  • IIPSInstanceManager
  • IIPSSOAPServer

In meinen ersten Gehversuchen habe ich die folgenden Code-Zeilen erfasst und erhalte damit eine Session-ID und die ObjektID’s von IP-Symcon:


...
        {
            IPSSOAPServerClient proxy = new IPSSOAPServerClient("iipssoapserverPort");
            string message = proxy.StartSession(IIPSSoapServer.TFilterType.ftExcludeFilter);

            Console.WriteLine(message);

            IPSInstanceManagerClient instance = new IPSInstanceManagerClient("iipsinstancemanagerPort");
            ushort[] aListe = instance.GetInstanceList();

            foreach (ushort element in aListe)
            {
                Console.WriteLine( element );
            }
...

Für meine weiteren Tests möchte ich nun meine FS20 Schaltersteckdose (ObjektID = 15533) einschalten. Dazu erweitere ich den obigen Code um folgende Zeilen:


            IPSFS20Client device = new IPSFS20Client("IIPSFS20Port");

            device.SwitchMode( 15533, true );

            Console.ReadLine();
        }
...

Hier bekomme ich immer eine Fehlermeldung bzgl. dem Überladen der Switch-Methode. Was mache ich falsch. Komme hier einfach nicht weiter und wäre für jede Hilfe dankbar.

Ist zwar VB.Net sollte aber auch helfen:

paresy

Dies habe ich mir bereits angeschaut. Komme damit aber leider nicht weiter.

Okey. Hier ist die genau Lösung: http://www.ip-symcon.de/forum/51905-post29.html

Du musst die ID nicht als Parameter übergeben, sonder einen TIDHeader mitsenden. Das sieht dann in C# so aus:

paresy

Zuerst einmal vielen Dank für Deine Hilfe.

Ich habe nun den Code ergänzt:


            IPSSOAPServerClient proxy = new IPSSOAPServerClient("iipssoapserverPort");
            string message = proxy.StartSession(IIPSSoapServer.TFilterType.ftExcludeFilter);

            Console.WriteLine(message);

            IPSInstanceManagerClient instance = new IPSInstanceManagerClient("iipsinstancemanagerPort");
            ushort[] aListe = instance.GetInstanceList();

            foreach (ushort element in aListe)
            {
                Console.WriteLine( element );
            }

            WCFSoap.IIPSFS20.TIDHeader header = new WCFSoap.IIPSFS20.TIDHeader();

            header.ID = 15533;

            IPSFS20Client device = new IPSFS20Client("IIPSFS20Port");

            device.SwitchMode( ???, true);


Die Methode SwitchMode() verlangt 2 Argumente. Was gebe ich für ??? an.

Vielleicht den Header? Den hast du ja noch nirgends verbraucht - nur deklariert.

Im Prinzip sollte SwitchMode nur einen Paramter haben, wie du im Code der #2 Quelle auch sehen kannst.

paresy

Wenn ich nun meinen header der SwitchMode-Methode übergebe, bekomme ich wieder den Fehler bzgl. Überladung der SwitchMode-Methode.

Hallo Paresy,

ich habe mir noch einmal den Link http://www.ip-symcon.de/forum/42917-post3.html angeschaut.

Verweis nicht als Service References definieren, da hier das .NET Framework 3.5 benutzt wird.
Verweis als Web References definieren. Hier wird .NET Framework 2.0 benutzt.

Hier nun mein Code für FS20-Schaltersteckdose:


...
            IIPSFS20.IIPSFS20service fs20device = new WCFSoap35.IIPSFS20.IIPSFS20service();
            fs20device.TIDHeaderValue = new WCFSoap35.IIPSFS20.TIDHeader();
            fs20device.TIDHeaderValue.ID = 15533;
            fs20device.SwitchMode(true);
...

Vielen Dank noch einmal.