Web Service - CSharp client et serveur Apache

Steph115 Messages postés 163 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 3 février 2012 - 3 févr. 2012 à 00:21
cs_rodcobalt22 Messages postés 193 Date d'inscription dimanche 10 février 2002 Statut Membre Dernière intervention 16 février 2016 - 9 févr. 2012 à 11:46
Bonjour à vous,

Je post ici car je suis en train de porter un web service PHP sous C# (Visual Studio 2010).
Le projet est en Framework 4 mais le web service a été rajouté comme référence compatible Framework2 (en fonction du wsdl).

Je travail pour le moment juste sur un web service classique type "HelloWorld".

Ce web service fonctionne correctement en PHP et en C#.

Dès que je l'authentification est activé sur l'Apache par le .htaccess (Côté Serveur du Web Service) alors là lorsque je lance mon client C# j'obtiens cette erreur :
Exception : WebException
La demande a échoué avec l'état HTTP 400 : Bad Request.

Dans les logs d'Apache je vois cette ligne :
[Thu Feb 02 23:52:06 2012] [error] [client XX.XX.XX.XX] Invalid URI in request <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="https://www.domaine.com/api/helloworld/webservices.php?wsdl" xmlns:types="https://www.domaine.com/api/helloworld/webservices.php?wsdl/encodedTypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><tns:bonjour>Toto

</tns:bonjour></soap:Body></soap:Envelope>POST /api/helloworld/webservices.php HTTP/1.1



Le code côté client C# est le suivant :
            // On appelle le web service
            WebService mywebservice = new WebService();
            
            // Définit une authentification BASIC
            CredentialCache myCredentials = new CredentialCache();
            NetworkCredential netCred = new NetworkCredential("User1", "Pass1");
            myCredentials.Add(new Uri(mywebservice.Url), "Basic", netCred);
            mywebservice.Credentials = myCredentials;


            // Définit la valeur de l'user agent
            mywebservice.UserAgent = ".NET Framework";

            

            string retour = mywebservice.bonjour("Tata");

            MessageBox.Show(retour, "Retour de l'API", MessageBoxButtons.OK, MessageBoxIcon.Information);




Pour information l'authentification fonctionne avec PHP et la requête qui fonctionne avec PHP est la suivante :
POST /api/helloworld/webservices.php HTTP/1.0
Host: www.domaine.com:443
User-Agent: NuSOAP/0.9.5 (1.123)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: "https://www.domaine.com/api/helloworld/webservices.php?wsdl#bonjour"
Authorization: Basic fFGFdGDFGGGFdfhllerGDSFGFDGDSFGksjfdsgk343gFGFG==
Content-Length: 637

<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="https://www.domaine.com/api/helloworld/webservices.php?wsdl">
<SOAP-ENV:Body>
<tns:bonjour xmlns:tns="https://www.domaine.com/api/helloworld/webservices.php?wsdl">
Tata


</tns:bonjour>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>





Merci encore pour votre aide.

Chaque problème a sa solution. S'il n'y a pas de solution c'est qu'il n'y a pas de problème.

1 réponse

cs_rodcobalt22 Messages postés 193 Date d'inscription dimanche 10 février 2002 Statut Membre Dernière intervention 16 février 2016
9 févr. 2012 à 11:46
Je ne suis pas un grand spécialiste sur le sujet, mais si tu essayais d'envoyer ton SOAP, celui des log apache, par une page PHP ?
T'auras peut peut être des informations supplémentaire sur ce fameux Invalide Request?

De souvenir, si ton erreur porte sur l'URI, c'est qu'il y a un problème de formalisation des types vis à vis de WSDL. Mais j'avoue que je peux me tromper.


RodCobalt22, vous salue bien
Pensez au TAG résolu ! Ainsi les réponses seront plus facile à trouver et les serial Helper iront plus vite
 PS : Pardonnez mes fautes d'orthographe (All
0
Rejoignez-nous