impet
(impet)
1
Hi,
I am trying to make RemObjects SDK SOAP server (in Delphi) and import WSDL in Delphi client following Wiki below
http://wiki.remobjects.com/wiki/WIP:How_to_consume_RemObjects_SOAP_services_with_third_party_clients
Could you please provide me some guidance how to handle properly ClientID headers ?
I see in proxy file generated by Delphi WSDL importer lines like
InvRegistry.RegisterHeaderClass(TypeInfo(CustomerUtils), ROClientIDHeader, ‘ROClientID’, ‘http://tempuri.org/’);
but do not know how to read/write this header values.
Thanks
EvgenyK
(Evgeny Karpov)
2
On client-side, you need to create
<ROClientIDHeader SOAP-ENV:mustUnderstand="0" xmlns="http://tempuri.org/">
<ID>your_guid</ID>
</ROClientIDHeader>
in header node manually.
On server-side, you need to set xsoClientIdInWsdl in TROSOAPMessage.SerializationOptions.
later you can read it in any service’s method as ClientID.
impet
(impet)
3
Hi EnugenyK,
I know this. I am looking for best practice example how to do this with Delphi (WSDL importer)
Your wiki http://wiki.remobjects.com/wiki/WIP:How_to_consume_RemObjects_SOAP_services_with_third_party_clients does have sample for .Net but for some reason Delphi example is missing.
EvgenyK
(Evgeny Karpov)
4
You need to cast your service to ISOAPHeaders and in that interface set ROClientID:
var
login_params: LoginService___Login;
login_response: LoginService___LoginResponse;
login: LoginService;
login_headers, data_headers: ISOAPHeaders;
lROClientIDHeaders: ROClientIDHeader;
data: DataService;
data_parameters: DataService___GetDateTime;
data_response: DataService___GetDateTimeResponse;
begin
lROClientIDHeaders := ROClientIDHeader.Create;
try
lROClientIDHeaders.ID := GUIDToString(NewGuid); //generate new guid
login := GetLoginService;
login_params := LoginService___Login.Create;
try
if Supports(login,ISOAPHeaders,login_headers) then try
login_headers.Send(lROClientIDHeaders); //set ROClientIDHeader for login service
finally
login_headers := nil;
end;
login_params.aUserID:= 'a';
login_params.aPassword:='a';
login_response := login.Login(login_params);
ShowMessage('Logged = '+ BoolToStr( login_response.Result,true));
if not login_response.Result then exit;
finally
login_response.Free;
login_params.Free;
login := nil;
end;
data := GetDataService();
data_parameters:= DataService___GetDateTime.Create;
try
if Supports(data,ISOAPHeaders,data_headers) then try
data_headers.Send(lROClientIDHeaders); //set ROClientIDHeader for data service
finally
data_headers := nil;
end;
data_response := data.GetDateTime(data_parameters);
ShowMessage(DateTimeToStr(data_response.Result.AsDateTime));
data_response.Free;
finally
data_parameters.Free;
data := nil;
end;
finally
lROClientIDHeaders.Free;
end;
end;