Pregunta

He escrito un servicio web .NET que debe ser consumido por un cliente fuera de mi control (mi servidor es un simulador para un servidor en vivo escrito en PHP). El servicio web funciona según lo deseado, pero el cliente no tiene la capacidad de agregar la extensión .asmx, ni ninguna extensión para el caso, en sus llamadas. Básicamente utilizan http: // localhost / soap / MyWebService mientras IIS espera http: //localhost/soap/MyWebService.asmx . ¿Hay alguna forma de hacer que IIS responda a las solicitudes sin la extensión .asmx?

¿Fue útil?

Solución

Agregue una asignación de comodines, que enrutará todas las solicitudes a través de ASP.NET:

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

También deberá realizar una reescritura de URL para permitir que la solicitud entrante http: // localhost / soap / MyWebService se asigne a http: // localhost / soap / MyWebService .asmx .

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

Básicamente, podría agregar algo como lo siguiente a su método Application_BeginRequest :

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

No lo he probado (y es un HACK) pero debería ayudarte a comenzar.

Otros consejos

También puede colocarlo en un directorio por sí mismo, luego en IIS configúrelo como documento predeterminado.

En el servidor: C: /mywebsite.com/mywebservice/mywebservice.asmx

En IIS, configure mywebservice.asmx como documento predeterminado

En la web: http://mywebsite.com/mywebservice

Me parece que hay algo muy mal con el cliente PHP. No deben interpretar la URL del servicio de ninguna manera. Cualquier URL que se especifique en los metadatos del servidor o la configuración del cliente es la URL que deben usar.

No conozco PHP, pero ¿alguien puede decirme por qué tiene sentido que PHP le importe cuántos puntos hay en una URL? No puedo ver que a ningún cliente le importe si mi servicio está en http: // localhost / foo / bar o " http: // localhost / foo / barasmx? PHP = 0 " ;.

En php solo debe llamar a wsdl, no necesita el asxm o ese tipo de cosas estúpidas que hace .net.

un ejemplo 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());

eso es todo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top