Domanda

Ho scritto un servizio Web .NET che deve essere utilizzato da un client al di fuori del mio controllo (il mio server è un simulatore per un server live scritto in PHP). Il servizio Web funziona come desiderato, ma il client non ha la possibilità di aggiungere l'estensione .asmx o qualsiasi estensione del caso, nelle loro chiamate. Fondamentalmente usano http: // localhost / soap / MyWebService mentre IIS si aspetta http: //localhost/soap/MyWebService.asmx . Esiste un modo per far rispondere IIS alle richieste senza l'estensione .asmx?

È stato utile?

Soluzione

Aggiungi un mapping jolly, che indirizzerà tutte le richieste tramite ASP.NET:

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

Dovrai anche riscrivere l'URL, per consentire alla richiesta in arrivo http: // localhost / soap / MyWebService di mappare su http: // localhost / soap / MyWebService .asmx .

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

Fondamentalmente, potresti aggiungere qualcosa come il seguente al tuo metodo Application_BeginRequest :

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

Non l'ho provato (ed è un HACK) ma dovrebbe iniziare.

Altri suggerimenti

Potresti anche inserirlo in una directory da solo, quindi in IIS impostarlo come documento predefinito.

Sul server: C: /mywebsite.com/mywebservice/mywebservice.asmx

In IIS impostare mywebservice.asmx come documento predefinito

Sul web: http://mywebsite.com/mywebservice

Mi sembra che ci sia qualcosa di molto sbagliato nel client PHP. Non dovrebbero interpretare l'URL del servizio in alcun modo. Qualunque URL sia specificato nei metadati del server o nella configurazione client è l'URL che dovrebbero usare.

Non conosco PHP, ma qualcuno può dirmi perché ha senso che a PHP importi quanti punti ci sono in un URL? Non riesco a vedere che dovrebbe interessare qualsiasi cliente se il mio servizio è disponibile all'indirizzo http: // localhost / foo / bar o " http: // localhost / foo / barasmx? PHP = 0 ".

In php devi chiamare solo il wsdl, non hai bisogno dell'asm o di quel tipo di cose stupide che fanno .net.

un semplice esempio

$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());

tutto qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top