Problème de passage de paramètre non scalaire (classe)
Bonjour,
- ce post fait référence au post résolu de vern's web services - pb de communication serveur/client -
Moi aussi je rencontre le même genre de problème , j'ai besoin de passer en parametre une classe non scalaire lors d'un appel de fonction d'un client vers un serveur web via HTTPRIO.
Elle est déclarée en TRemotable côté client (suite à l'import du WSDL) mais comme elle n'a pas été crée en Delphi (en C++) côté server je ne sais pas si elle a été crée en équivalent.
Par contre j'arrive à executer la requête Subscribe avec le petit soft WebServiceStudio qui pointe vers le même WSDL.
Voici le code cote client :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
procedure TForm1.Button1Click(Sender: TObject);
var
srResult:TSubscribeResult;
sFilter : String;
iuri:WideString;
itypename:WideString;
begin
// création de l'objet non scalaire Subscriber
srSubscriber := Subscriber.Create() ;
srSubscriber.ConsumerPort := 0 ;
srSubscriber.ConsumerHost := 'a';
srSubscriber.Identifier := '1111' ;
sFilter := 'filtre scaliare';
// création de l'objet résultat de l'appel
srResult := TSubscribeResult.Create;
srResult.ResultStatus := TResultStatus.create;
// récup des infos de registration de la classe Subscriber
RemClassRegistry.GetXSDInfoForClass(TypeInfo(Subscriber),iuri, itypename ) ;
ShowMessage('Subscriber ' + iuri + ' : ' + itypename ) ;
srResult := (HTTPRIOOperationSubscriptionService2008 as OperationSubscriptionService2008Soap).Subscribe( (srSubscriber as Subscriber), sFilter);
ShowMessage('Apres Subscribe ' + GetResultLevel(srResult.ResultStatus.Level) + srResult.ResultStatus.Message ) ;
end; |
Ceci me renvoi comme message : 'Apres Subscribe Error Parametre requis non spécifié Subscriber '
alors que GetXSDInfoForClass m'a renvoyé les infos sur l'uri et le typename correspondant au RegisterXSClass importé du WSDL
J'ai le même message d'erreur si je ne fait pas le Create de mon Subscriber.
Serait il possible qu'il y ait incompatbilité entre la déclaration (en Delphi) côté client et celle en C++ côté server (qui serait traitée par WebServiceStudio)
et dans ce cas comment le résoudre
merci pour votre aide ...
PS : il est quand même étonnant que j'arrive à récupérer le message d'erreur avec sa structure
suite import wsdl :
Code:
1 2 3 4 5 6
|
initialization
InvRegistry.RegisterInterface(TypeInfo(OperationSubscriptionService2008Soap), 'http://www.giro.ca/OperationSubscriptionService2008', 'utf-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(OperationSubscriptionService2008Soap), '/OperationSubscriptionService2008/%operationName%');
RemClassRegistry.RegisterXSClass(Subscriber, 'http://www.giro.ca/OperationSubscriptionService2008', 'Subscriber');
RemClassRegistry.RegisterXSClass(SubscribeResult, 'http://www.giro.ca/OperationSubscriptionService2008', 'SubscribeResult','',false); |