Вызов веб-службы IIS без расширения .asmx - PullRequest
3 голосов
/ 04 марта 2009

Я написал веб-сервис .NET, который должен использоваться клиентом вне моего контроля (мой сервер является симулятором для живого сервера, написанного на PHP). Веб-служба работает как нужно, но у клиента нет возможности добавлять расширение .asmx или любое другое расширение в этом отношении в свои вызовы. Они в основном используют http://localhost/soap/MyWebService, в то время как IIS ожидает http://localhost/soap/MyWebService.asmx. Есть ли способ заставить IIS отвечать на запросы без расширения .asmx?

Ответы [ 4 ]

9 голосов
/ 04 марта 2009

Добавить сопоставление с подстановочными знаками, которое будет направлять все запросы через ASP.NET:

.

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

Вам также понадобится переписать URL-адрес, чтобы разрешить входящему запросу http://localhost/soap/MyWebService сопоставляться с http://localhost/soap/MyWebService.asmx.

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

В принципе, вы можете добавить что-то вроде следующего к вашему Application_BeginRequest методу:

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

Я не проверял это (и это взлом), но это должно помочь вам начать.

4 голосов
/ 04 марта 2009

Вы также можете поместить его в каталог самостоятельно, а затем в IIS установить его как документ по умолчанию.

На сервере: C: /mywebsite.com/mywebservice/mywebservice.asmx

В IIS установите mywebservice.asmx в качестве документа по умолчанию

В сети: http://mywebsite.com/mywebservice

0 голосов
/ 07 апреля 2009

В php вы должны вызывать только wsdl, вам не нужен asxm или такие глупости, которые делает .net.

один простой пример

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

вот и все.

0 голосов
/ 05 марта 2009

Мне кажется, что с клиентом PHP что-то не так. Они не должны каким-либо образом интерпретировать URL-адрес службы. Независимо от того, какой URL указан в метаданных сервера или конфигурации клиента, он должен использоваться.

Я не знаю PHP, но кто-нибудь может мне сказать, почему PHP имеет смысл заботиться о том, сколько точек в URL? Я не понимаю, что для любого клиента должно иметь значение, является ли мой сервис http://localhost/foo/bar или "http://localhost/foo/b.a.r.asmx?PHP=0".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...