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?
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…
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.