Kurze Frage: die COM-Schnittstelle aus der V1 gibts nicht mehr?
Meinst Du „Serial Port“ ?
Hallo Rainer,
nein, ich meinte die Windows COM-Schnittstelle (COM = Component Object Model ).
Da kann ich dir leider nicht helfen.
Die gibt es nicht mehr. Du müsstest jetzt SOAP verwenden.
paresy
Schade…
Das bedeutet schlaflose Nächte.
Wird das denn aus VB.NET heraus funktionieren? Ich hab noch nie was mit SOAP gemacht, von daher frag ich erstmal.
Und falls ja, wo find ich irgendwelche Infos dazu? Aus deinem ersten Post kann ich nicht wirklich irgendwelche Infos rausziehen…
Und nochmal: ich hab mich mal nun ein bißchen schlau gemacht (denk ich zumindest :rolleyes:). Einen WebService einbinden, mit dem ich dann über SOAP kommuniziere, geht nicht, oder? Zumindest find ich keine Referenz, die ich einbinden könnte…
Hast Du mir nen kleinen Tip, paresy? Ich hab hier meine eigene Server-Client-Software am laufen und hab bei der V1 noch über COM mit IPS geredet. Würde nun aber gern auf die V2 wegen LCN umsteigen und kann das aber nicht, bevor ich wieder mit der V2 reden kann. :eek:
Super, vielen Dank! Nun klappt´s auch problemlos mit dem Einbinden der Web Reference. Das Wochenende ist gerettet…
Also, das Verbinden klappt.
Nur bei allen IIPSSOAPServerService.GetSessionMessages erhalte ich als Data Nothing zurück. Die SenderID und MessageID passen, nur krieg ich in der Message keine Info, welchen Wert zum Beispiel eine geänderte Variable annimmt. Sollte doch aber in der Message als Data enthalten sein, oder? Oder muss/soll ich das über IIPSDebugServerService.GetMessages machen?
Übrigens Klasse die Schnittstelle, macht richtig Spaß sich da einzuarbeiten!
Hattest du mal geguckt, wie der MessageReader das in der Delphi Demo macht? Oder hast du VB.Net Quellcode, den ich angucken könnte? (Vielleicht hast du eine VB.Net Demo für andere User!?)
GetSessionMessages musst du einfach in einer endlosschleife aufrufen und bei der Rückgabe (20Sek Timeout) ist es ein Array von TIPSMessage.
Data ist dabei eine Variant Array. Wenn es dort mit VB.Net inkompatibilitäten geben sollte, müsste ich sehen, wie man die beheben kann.
paresy
Hallo paresy,
den Code zur Verfügung stellen ist kein Problem. Zum Schluß wirds dann ne fertige Klasse geben. Problem ist, wie schon geschrieben, dass „Data“ immer Nothing zurückgibt (siehe Code unten).
Ich geh nun den Umweg über den VariableManagerService, um mir den Wert der Variable zu holen, was aber halt (glaub ich) nicht laufzeitoptimal ist.
Hier mal der Codeschnippsel:
Dim ips_I_soap As New IIPSSOAPServer.IIPSSOAPServerservice
Dim ips_I_vms As New IIPSVariableManager.IIPSVariableManagerservice
Dim ips_V_str_id As String
ips_V_str_id = ips_I_soap.StartSession(IIPSSOAPServer.TFilterType.ftExcludeFilter)
While True
Dim msg() As IIPSSOAPServer.TIPSMessage
msg = ips_I_soap.GetSessionMessages(ips_V_str_id) //Hier ist Data = Nothing
If msg.Length > 0 Then
Dim tmp_index = Array.FindIndex(msg, AddressOf ChkMsgVM) //Hier filter ich die MessageID "10063" raus
If tmp_index >= 0 Then
Dim var As IIPSVariableManager.TIPSVariable
var = ips_I_vms.GetVariable(msg(tmp_index).SenderID)
End If
End If
End While
Das sieht aus, als wenn VB.Net die Daten, den Variant nicht abbilden kann. Deine Lösung funktioniert, ist aber ein paar ms langsamer, weil noch eine Anfrage gemacht werden muss.
Da das Problem aber Recht kompliziert ist, vermute ich, dass ich nicht so schnell eine Lösung finden werde.
paresy
Dann mach ich erstmal so weiter und änder es, wenn´s mal irgendwann ne Lösung gibt. Danke aber trotzdem schonmal.
Ich hab nun noch ein kleines Problem: manchmal ist die SenderID einer Message „2“ - VB.NET wirft dann eine SOAPHeaderException, dass die Variable #2 nicht existiert. Ist das auch noch irgendein Problem mit VB.NET? Das Objekt gibt es ja nicht wirklich., da die ID doch immer 5stellig ist. Die MessageID stammt dann immer aus dem TimerPool.
Edit: Liegt daran, dass ich die Message einer Variable zuordnen will - sie aber nicht von einer Variable kommt. Ich muss also erst eine GetVariableList()-Anfrage schicken und dann entsprechend abfragen…
Hallo paresy,
musste leider ne Pause einlegen, nun geht´s weiter…
Kurze Frage: die Funktion „SetValue“ gibts noch nicht per SOAP, kann das sein? Ich würde gerne analog wie in einem Script unabhängig vom Typ über die Schnittstelle Variablen ändern.
Noch einen: so interne Geschichten wie IPS_GetStatusVariable? Edit: Hab´s gefunden in IIPSModule, Thx
Sorry, muss nochmal nachhaken:
zum einen ist die Syntax von GetStatusVariable ist anders wie direkt in IPS - mir fehlt die Möglichkeit, eine InstanceID anzugeben und zum anderen klappt es nicht.
Grund: „No class registered for invokable interface IPSModule“…
So langsam komm ich mir doof vor…
Folgendes Problem: ich bekomm keine Messages mit der MessageID 10064 (VariableOnChange)… Wenn ich debugge, kommen nur Messages mit der ID 10063 durch. Hast Du ne Idee?
Danke auf jeden Fall schon mal!
Das Phänomen hab ich auch vor einiger Zeit festgestellt. Das Problem ist, dass du den Typ HTTPRIO verwendest. Das geht nicht. Ein anderer wird aber, soweit ich das überblicke, nicht exportiert.
Festgestellt hab ichs, weils mit dem SDK anders gemacht wird und dort funktionierts. Ich nehme an da wirds ein Bugfix geben müssen… Also Ruhe bewahren…
Gruß,
Toni
Die 10064 gibt es nicht. Nur die 10063. OnChange Nachrichten werden nicht gesendet, da sie ja in OnUpdate enthalten sind.
paresy