Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour
N'ayant trouvé aucune solution à mon problème PWB (voir mon dernier post) je me suis tourné vers l'utilisation de webservice via .net engine.
j'arrive sans problème à créer une datawindow basée sur mon webservice (une fonction de conversion de int en string.... sur weblogic). PWB crée la DLL Et recopie les DLL .net nécessaires à son fonctionnement dans le rep où se trouve ma PBL de test.
par contre je n'arrive pas à l'appeler via un proxy créé avec l'assistant de création de proxy (.net engine)
j'ai systématiquement l'erreur suivante : "Bad function runtime at line ....". lors de l'invocation de la méthode du web service.
a priori PWB ne semblerait pas trouver DLL (car si je l'enleve complètement du répertoire où elle se trouve cela ne change rien. Mais Il la trouve avec la datawindow....
je me suis dit que cela pouvait venir de mon appel qui est codé de la manière suivante :
WSproxy Ws
Ws = create WSProxy (WSProxy c'est l'objet créé par PWB après deploiement du web service )
int i = 5
string s
s = Ws.intToString(i) // appel de la méthode de conversion .
je n'ai trouvé nul part un exemple de comment appeler un WE Service via .net .
l'appel est-il bon? Si oui pouvez-vous me donner des pistes sur l'origine de l'erreur (ou un exemple) car je ne vois pas ce qui peut clocher.
merci d'avance.
Dernière modification par babypower (14-09-2010 13:56:27)
Hors ligne
Salut !
A tout hasard...
* tu as bien importé les pbx nécessaires ? (ce qui te ramène les objets soapconnection etc... )
* l'instanciation de ton proxy me parait peut-être étrange : je ne travaille pas avec .net engine, il ya donc peut-être certaines différences..
mais il me semble plus familier d'instancier ainsi :
WSproxy Ws soapconnection conn long checkreturn conn = create soapconnection checkreturn = conn.createInstance( Ws, "WSproxy", "chemin du fichier .asmx") ...
et après tu appelles les fonctions de ton proxy... avec une vérif plus fine en utilisant checkreturn, par ex.
Tu verras plus de détails via cet exemple simple... : http://www.sybase.be/detail?id=1051307
Tiens -nous au courant ;-)
Bybye
El Feliz.
Hors ligne
bonjour elfeliz
j'avais bien fait comme indiqué dans ton message mais j'obtiens systématiquement le message d'erreur suivant :
"THE SoapClient doesn't support .NET proxy" ???.
j'en avais déduit (peut être à tort) qu'il ne fallait pas utiliser de soapconnection .
j'ai pensé que c'était réservé à easysoap.
le message survient à l'appel de l'unique fonction de mon WebService
le webservice que j'ai créé sous Weblogic est une simple conversion d'entier en String. donc basique.
je n'ai pas de fichier se terminant par asmx ??! j'ai mis l'url du WebService dans le endpoint.
j'ai dans mon répertoire les fichiers suivants :
- Sybase.Powerbuilder.WebService.Runtime.dll
- Sybase.Powerbuilder.WebService.RuntimeRemoteLoader.dll
- Sybase.Powerbuilder.WebService.WSDL.dll
- Sybase.Powerbuilder.WebService.WSDLRemoteLoader.dll
(c'est les 4 DLL mentionné dans la Doc PWB)
- wstest.dll (mon proxy)
ci joint le code que j'ai utilisé selon tes conseils :
SoapConnection cnn
wstest wss // proxy généré par .NET C'est le nom de l'assembly qui se trouve dans mon répertoire.
long rval
cnn = create SoapConnection
rval = cnn.createInstance(wss,"wstest","http://<nommachine>:7001/WSTest/WSTestService") // EndPoint WebLogic
try
sle_4.text = wss.inttostringoperation(long(sle_3.text))
catch (SoapException e)
messagebox("error",e.text)
end try
destroy cnn
en regardant en débug, l'objet wss que j'utilise est initialisé de la même manière que avec un simple CREATE
une dernière chose : Le WebService a été généré en jax-ws 2.1
vois-tu le problème dans le code ?
Dernière modification par babypower (14-09-2010 13:15:07)
Hors ligne
Salut,
Quel est le nom du PBX que tu as importé ?
EasySoap
pbsoapclientXXX.pbd/pbx
.Net Engine
pbwsclientXXX.pbd/pbx
Hors ligne
Bonjour,
Merci d'avance. Cela facilite la lecture.
Hors ligne
Salut,
Quelle est la valeur de rval ?
Ton fichier WSDL est-il accessible via Internet Explorer avec le chemin marqué en propriété dans le proxy (en l'occurence :http://<nommachine>:7001/WSTest/WSTestService) ? Il est parfois nécessaire de recopier le fichier en local...
Par ailleurs, comme dit, je n'utilise pas .net, mais à ma connaissance il te faut le sdk et le framework .net installé sur la machine cliente.
Les pbx importées sont aussi différentes en fct de ce que tu utilises ( celles pour .net comprennent des appels au frame, justement, je crois...)
A plus,
El Feliz
Hors ligne
Yannis a trouvé l'origine de mon Problème :
en fait j'avais les deux pbx dans ma library list car j'utilise les deux types de WebService (Soap et .net).
mais j'avais en 1er la pbl soap ==> priorité sur la pbl .net.
en inversant l'ordre tout roule.
par contre impossible du coup d'appeler des webservice Soap ?!!
il va falloir qu'on choisisse à moins que l'on puisse faire autrement .
merci encore pour votre aide .
Hors ligne
La seule méthode est de modifier dynamiquement ta library list au moment ou tu en as besoin.
Pour celà tu as la fonction suivante :
SetLibraryList( "lib1.pbd, lib2.pbd, lib5.pbd")
Hors ligne
Hors ligne