Frage

Ich habe einen .NET-Web-Dienst geschrieben, die von einem Kunden außerhalb meiner Kontrolle (mein Server ist ein Simulator für einen Live-Server geschrieben in PHP) verbraucht werden soll. Der Web-Dienst funktioniert wie gewünscht, aber der Kunde hat nicht die Fähigkeit, die .asmx Erweiterung oder eine beliebige Erweiterung für diese Angelegenheit hinzuzufügen, in ihren Anrufen. Sie verwenden im Grunde http: // localhost / soap / MyWebService während IIS erwartet http: //localhost/soap/MyWebService.asmx . Gibt es eine Möglichkeit IIS reagiert auf Anfragen ohne die Erweiterung .asmx zu machen?

War es hilfreich?

Lösung

ein Wildcard-Mapping hinzufügen, die leitet alle Anfragen durch ASP.NET:

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

Sie müssen auch einige URL-Rewriting tun, die eingehende Anforderung http://localhost/soap/MyWebService, damit Karte http://localhost/soap/MyWebService.asmx.

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

Grundsätzlich Sie so etwas wie die folgenden zu Ihrem Application_BeginRequest Methode könnte hinzufügen:

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

Ich habe es nicht getestet (und es ist ein HACK), aber es sollte Ihnen den Einstieg.

Andere Tipps

Sie können es auch selbst in einem Verzeichnis kopieren, dann in IIS es als Standarddokument festgelegt.

Auf Server: C: /mywebsite.com/mywebservice/mywebservice.asmx

In IIS gesetzt mywebservice.asmx als Standarddokument

Im Web: http://mywebsite.com/mywebservice

Es scheint mir, dass es etwas sehr falsch mit dem PHP-Client. Sie sollten nicht die URL für den Dienst in irgendeiner Weise werden interepreting. Was auch immer URL angegeben in Server-Metadaten oder Client-Konfiguration ist die URL sie verwenden sollten.

Ich weiß nicht, PHP, aber kann mir jemand sagen, warum es keinen Sinn für PHP macht, wie viele Punkte gibt es in einer URL zu kümmern? Ich kann nicht sehen, dass es auf jedem Client-Rolle sollte, ob mein Dienst unter http: // localhost / foo / bar oder " http: // localhost / foo / barasmx PHP = 0 " .

In PHP müssen Sie nur die Wsdl nennen, brauchen Sie nicht die asxm oder diese Art von dummen Dinge, die tun .net.

ein einfaches Beispiel

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

Das ist alles.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top