Nous avons des difficultés à déployer un service Web qui fonctionne dans notre environnement de développement, mais pas en production. Une partie du problème réside dans le fait que nos serveurs de production sont équilibrés en charge, donc pour mettre à niveau un des serveurs, nous devons le sortir du load-balance et essayer de tester le serveur en isolation, ce qui est un défi.Pourquoi puis-je accéder à un fichier WSDL à partir d'un navigateur, mais pas à partir d'une application?
L'ordinateur sur lequel je travaille est appelé Web01
et l'ordinateur que j'utilise pour tester s'appelle Ts01
. Sur les deux machines, j'ai modifié le fichier hosts pour rediriger mydomain.com
vers l'adresse IP appropriée du site Web sur Web01
.
Je teste deux façons d'accéder au service Web sur chaque machine:
- Un simple appel de navigateur pour
http://www.mydomain.com/services/myservice.asmx?WSDL
. - Application de test VB6 qui appelle le service Web à l'aide du WSDL référencé ci-dessus via
SOAPClient
.
Voici les résultats du test:
Browser VB6 App Ts01 OK OK Web01 OK ERROR
Le test semble fonctionner correctement pour toutes les situations, sauf l'application VB6 installé sur le serveur Web. L'erreur que j'obtenons est:
-2147024809 - WSDLReader: Chargement du fichier WSDL n'a pas HRESULT = 0x80070057 - WSDLReader: XML Parser a échoué à linenumber 0, LinePosition 0, la raison est: Le système ne peut pas localiser l'objet spécifié .
HRESULT = 0x1
je reçois la même erreur de retour sur Ts01
si je fournir une mauvaise adresse WSDL dans l'application VB6. Il semble que l'application VB6 sur Web01
ne peut pas accéder à la DLL de service Web sur Web01
, ce qui est un gros problème.
Il est peut-être intéressant de noter que cela fonctionne également sur ma machine de développement locale, où l'application VB6 et le service Web sont installés sur la même machine. Pourquoi l'application VB6 rencontre-t-elle des difficultés pour communiquer avec le service Web via SOAPClient
lorsqu'elle est exécutée à partir de la même boîte que le service Web? J'ai utilisé fiddler pour inspecter les en-têtes des requêtes sur ma machine locale appelant notre serveur dev. Voici la différence entre les demandes de navigateur et soapclient:
Navigateur:
GET http://devserver/services/myservice.asmx?WSDL HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/x-shockwave-flash, */*
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: devserver
Cookie: SIFR-PREFETCHED=true
SOAPClient (VB6 App):
GET http://devserver/services/myservice.asmx?WSDL HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
Host: hbhswebnet
Connection: Keep-Alive
Pragma: no-cache
Je ne sais pas si cette information est utile, mais peut-être c'est.
Avez-vous considéré qu'il s'agissait peut-être d'une erreur d'autorisation? Il est possible que l'application VB6 sur Web01 n'ait pas l'autorisation d'effectuer un appel SOAPClient. –
Je ne crois pas que ce soit un problème de programmation; il appartient à ServerFault –
Êtes-vous accéder à la machine distante via un proxy Web? –