Question

J'ai écrit un service Web .NET qui doit être utilisé par un client en dehors de mon contrôle (mon serveur est un simulateur pour un serveur actif écrit en PHP). Le service Web fonctionne comme souhaité, mais le client n'a pas la possibilité d'ajouter l'extension .asmx, ni aucune extension d'ailleurs, dans ses appels. Ils utilisent essentiellement http: // localhost / soap / MyWebService alors que IIS s'attend à http: //localhost/soap/MyWebService.asmx . Existe-t-il un moyen de faire en sorte qu'IIS réponde aux requêtes sans l'extension .asmx?

Était-ce utile?

La solution

Ajoutez un mappage générique qui acheminera toutes les demandes via ASP.NET:

http: //professionalaspnet.com/archive/2007/07/27/Configure-IIS-for-Wildcard-Extensions-in-ASP.NET.aspx

Vous devrez également procéder à une réécriture d'URL, pour permettre à la demande entrante http: // localhost / soap / MyWebService de mapper vers http: // localhost / soap / MyWebService. .asmx .

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

En gros, vous pouvez ajouter quelque chose de similaire à votre méthode Application_BeginRequest :

string path = Request.Path;
if (path.Contains("/soap/") && !path.EndsWith(".asmx"))
    Context.RewritePath(path + ".asmx");

Je ne l'ai pas testé (et c'est un HACK), mais cela devrait vous aider à démarrer.

Autres conseils

Vous pouvez également le placer dans un répertoire, puis le définir comme document par défaut dans IIS.

Sur le serveur: C: /mywebsite.com/mywebservice/mywebservice.asmx

Dans IIS, définissez mywebservice.asmx en tant que document par défaut

Sur le Web: http://mywebsite.com/mywebservice

Il me semble qu'il y a quelque chose qui ne va pas avec le client PHP. Ils ne doivent en aucun cas interpréter l'URL du service. Quelle que soit l'URL spécifiée dans les métadonnées du serveur ou la configuration du client, celle-ci doit être utilisée.

Je ne connais pas PHP, mais est-ce que quelqu'un peut me dire pourquoi il est logique que PHP se soucie du nombre de points dans une URL? Je ne vois pas que le fait que mon service fonctionne sur http: // localhost / foo / bar ou " http: // localhost / foo / barasmx? PHP = 0 ".

En php, vous devez appeler uniquement le wsdl, vous n'avez pas besoin de l'asxm ou de ce genre de choses stupides que .net fait.

un exemple simple

$wsdl = "http://domain/wsdlfile.wsdl"; //url to wsdl 
$client = new SoapClient($wsdl,array('trace' => 1,'encoding' => 'UTF-8','exceptions' => 0)); 
$Return = $client->callfunction();
echo htmlspecialchars($client->__getLastResponse());

c'est tout.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top