V2,c# und Soap

Hi,

wollte mich mit der neuen soap schnittstelle ein wenig beschäftigen bzw. meine fht auslesen. leider komme ich nich sonderlich weit.
Habe in c# eine servicereferenz auf http://localhost:3773/wsdl/IIPSFHT/ bzw. die wsdl angelegt und eingebunden. schmiert mir aber nach dem open des IPSFHTClient mit der fehlermeldung „SetAddressRequest must not have headers to be used in RPC encoded style“ ab.

gibt es schon ein paar beispielzeilen code um diese anzusprechen?

danke

Du musst einen Header mit der Instanz ID versenden.

In Delphi sieht die Klasse dafür so aus:


  TIDHeader = class(TSOAPHeader)
  private
    FID: Integer;
  published
    property ID: Integer  read FID write FID;
  end;

.....

   FH := TIDHeader.Create;
   FH.ID := InstanceID;

   SOAPHeaders.Send(FH);

Funktionieren die einfachen Sachen wie z.B. IIPSSimpleKernel?

paresy

hi,

super , danke für deine schnelle antwort in c# siehts dann so aus:

 
localhost.IIPSFHTservice s = new WindowsFormsApplication1.localhost.IIPSFHTservice();
            s.TIDHeaderValue = new WindowsFormsApplication1.localhost.TIDHeader();
            s.TIDHeaderValue.ID = 10663;
            s.SetMode(0);

eingebunden als webservice, nicht als servicereferenz, dann klapp es auf anhieb.probiere mal weiter bin begeistert…

IIPSSimpleKernel funktioniert tadellos,

kernel dir ,runlevel,ticktime,version und licensee alles sieht wunderbar aus.

noch ne kleine frage zur fht:

die daten der fht lese ich über requestdata aus?
oder wie kann ich die aktuellen werte der fht sonst auslesen?

habe mich auf das event registiert, bekomme aber keine rückmeldung

Du kannst mit dem IIPSVariableManager die Variablen direkt abfragen.
Dafür brauchst du dann nur die VariableID. Die bekommst du über IIPSModule (Header nicht vergessen) und GetStatusVariableID. Wie das geht wird hier erklärt:
http://www.ipsymcon.de/forum/showthread.php?t=4940 (über SOAP funktioniert es genau so)

Das IIPSFHT brauchst du eigentlich nur, wenn du die Instanz konfigurieren willst.

Wenn du auf „Nachrichten“ horchen willst, kannst du dir mal die MessageReader Klasse des SDK’s angucken:

Hier der wichtige Auszug:


//------------------------------------------------------------------------------
procedure TMessageReader.Execute;
var Messages: TIPSMessages;
    i, j: Integer;
    V: Variant;
begin

 CoInitialize(nil);

 //Create SOAP Server Object
 fRio := GetRIO('IIPSSOAPServer');
 fRio.HTTPWebNode.ReceiveTimeout := SessionTimeout * 1000;
 fSOAPServer := fRio as IIPSSOAPServer;

 //Get SessionID
 fSessionID := fSOAPServer.GetNewSessionID;

 //Let it run
 while Running do
  begin
   try
    Messages := fSOAPServer.GetMessages(fSessionID);
    if Length(Messages) > 0 then
     for i:=Low(Messages) to High(Messages) do
      begin
       fCurrentMsg := Messages[i];

       V := fCurrentMsg.Data;
       for j:=VarArrayLowBound(V, 1) to VarArrayHighBound(V, 1) do
        if VarType(V[j]) = varOleStr then
         V[j] := Base64Decode(V[j]);
       fCurrentMsg.Data := V;

       Synchronize(DoSendMessage);
       //fCurrentMsg.Free;
      end;
   except
    if not fSOAPServer.IsSessionValid(fSessionID) then
     try
      fSessionID := fSOAPServer.GetNewSessionID;
     except
      //just try it next time
     end;
   end;
  end;

end;

Wenn du die Nachrichten bekommst, dann guck dir in der SOAP Demo die UIPSKernel.pas an. Dort sind die Konstanten definiert.

paresy

paresy