Вопрос

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

Это было полезно?

Решение

Добавьте сопоставление с подстановочными знаками, которое будет маршрутизировать все запросы через 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");

Я не тестировал его (и это ХАК), но он должен помочь вам начать.

Другие советы

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

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

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

В интернете: http://mywebsite.com/mywebservice

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

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

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

вот и все.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top