Execute et OpenURL [ASP/Inet] - ASP - Programmation
MarshPosté le 17-01-2005 à 17:11:12
Bonjour,
Je plante tout d'abord le décor : J'utilise VB6 pour créer des applications IIS basées donc sur ASP. Un client se connecte via une interface en VB6 sur mon serveur que l'on nommera "S1". Ce même serveur peut se connecter sur un autre serveur ("S2" )(toujours application IIS en VB6) pour accéder à certaines fonctionnalités. On repose donc sur une architecture 3-tier. J'utilise le composant Inet pour que mon serveur S1 se connecte sur mon serveur S2. Ainsi je fais par exemple : InetObj.execute "http://monURL_blablabla & WCU","param1=toto¶m2="tata"
Le problème : Tout ca marche à merveille en mode débug. Un client C1 se connecte sur S1, puis demande à S1 une info de S2, tout ça se passe bien. MAIS, si je compile tout et que S1 fait un InetObj.Execute vers S2, alors la prochaine requete du client C1 va rester bloquée avant le beginRequest sur S1 ! Bref, ca crashe méchamment...
Après moultes recherches, j'ai trouvé juste un ligne qui dit "Execute ne marche pas avec l'ASP". Soit... je m'attèle donc à chercher une solution alternative et pourquoi pas utiliser InetObj.OpenURL. Sauf que là j'ai un autre problème : je n'arrive pas a faire passer les arguments... Si quelqu'un pouvait m'aider, Merci par avance !
[EDIT]
Bon après d'autres recherches (et pour ceux que ça intéresse...): Le composant Inet ne doit pas être utilisé avec IIS et/ou ASP. En effet, et comme j'ai pu le remarquer, microsoft indique que la méthode Execute n'est pas supportée en ASP et que le contrôle Inet n'a pas été conçu pour fonctionner avec IIS. Il est donc préconisé d'utiliser MSXML. MSXML est un service permettant de créer des applications traitant le XML mais aussi de faire des accès HTTP entre un client et un serveur ou bien entre deux serveurs, et donc désigné tout particulièrement pour mon exemple. Son utilisation est bien plus logique que Inet, et plus souple. J'ai pu réecrire mon code en quelques minutes !
Exemple :
Citation :
'** définition dim MonObjetXmlHttp as MSXML2.ServerXMLHTTP40 dim MonRetour as string dim nb_secondes as long dim Entete as string
'** on ouvre l'url MonObjetXmlHttp.Open "POST", "http://MonUrl",False MonObjetXmlHttp.SetRequestHeader "Content-Type", "Application/x-www-form-urlencoded" '** on va envoyer des paramètres MonObjetXmlHttp.Send "Param1=toto&Param2=Titi"
'** on attend (remplace StillExecuting de l'objet inet qu'il fallait faire boucler...) nb_secondes = 30 MonObjetXmlHttp.WaitForResponse nb_secondes
'** on peut récupérer l'entête en retour (remplace GetHeader) Entete = MonObjetXmlHttp.StatusText()
'** et enfin le corps MonRetour = MonObjetXmlHttp.ResponseText
Marsh Posté le 17-01-2005 à 17:11:12
Bonjour,
Je plante tout d'abord le décor :
J'utilise VB6 pour créer des applications IIS basées donc sur ASP. Un client se connecte via une interface en VB6 sur mon serveur que l'on nommera "S1".
Ce même serveur peut se connecter sur un autre serveur ("S2" )(toujours application IIS en VB6) pour accéder à certaines fonctionnalités. On repose donc sur une architecture 3-tier.
J'utilise le composant Inet pour que mon serveur S1 se connecte sur mon serveur S2.
Ainsi je fais par exemple :
InetObj.execute "http://monURL_blablabla & WCU","param1=toto¶m2="tata"
Le problème :
Tout ca marche à merveille en mode débug.
Un client C1 se connecte sur S1, puis demande à S1 une info de S2, tout ça se passe bien.
MAIS, si je compile tout et que S1 fait un InetObj.Execute vers S2, alors la prochaine requete du client C1 va rester bloquée avant le beginRequest sur S1 ! Bref, ca crashe méchamment...
Après moultes recherches, j'ai trouvé juste un ligne qui dit "Execute ne marche pas avec l'ASP".
Soit... je m'attèle donc à chercher une solution alternative et pourquoi pas utiliser InetObj.OpenURL. Sauf que là j'ai un autre problème :
je n'arrive pas a faire passer les arguments...
Si quelqu'un pouvait m'aider,
Merci par avance !
[EDIT]
Bon après d'autres recherches (et pour ceux que ça intéresse...):
Le composant Inet ne doit pas être utilisé avec IIS et/ou ASP.
En effet, et comme j'ai pu le remarquer, microsoft indique que la méthode Execute n'est pas supportée en ASP et que le contrôle Inet n'a pas été conçu pour fonctionner avec IIS.
Il est donc préconisé d'utiliser MSXML.
MSXML est un service permettant de créer des applications traitant le XML mais aussi de faire des accès HTTP entre un client et un serveur ou bien entre deux serveurs, et donc désigné tout particulièrement pour mon exemple.
Son utilisation est bien plus logique que Inet, et plus souple. J'ai pu réecrire mon code en quelques minutes !
Exemple :
'** définition
dim MonObjetXmlHttp as MSXML2.ServerXMLHTTP40
dim MonRetour as string
dim nb_secondes as long
dim Entete as string
'** on ouvre l'url
MonObjetXmlHttp.Open "POST", "http://MonUrl",False
MonObjetXmlHttp.SetRequestHeader "Content-Type", "Application/x-www-form-urlencoded"
'** on va envoyer des paramètres
MonObjetXmlHttp.Send "Param1=toto&Param2=Titi"
'** on attend (remplace StillExecuting de l'objet inet qu'il fallait faire boucler...)
nb_secondes = 30
MonObjetXmlHttp.WaitForResponse nb_secondes
'** on peut récupérer l'entête en retour (remplace GetHeader)
Entete = MonObjetXmlHttp.StatusText()
'** et enfin le corps
MonRetour = MonObjetXmlHttp.ResponseText
Voilou !!!
quelques liens :
http://msdn.microsoft.com/library/ [...] mscXML.asp
www.perfectxml.com/msxmlHTTP.asp+M [...] r&ie=UTF-8
Message édité par _charlyoleg_ le 19-01-2005 à 14:11:25