2009-03-04 2 views
3

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

ответ

7

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

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

+0

Хотя это решение действительно работает, оно работает только на системах с IIS 6 или выше. – jercra

+0

Можно добавить подстановочный знак в IIS 5.x, но шаги разные. – Brannon

+0

Да, вы можете добавить сопоставление подстановки в IIS 5.x, но есть ошибка, когда дело доходит до веб-службы, в которой вы получите сообщение об ошибке, когда глагол не разрешен. Исправлена ​​ошибка на досках сообщений ASP.net. – jercra

4

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

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

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

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

+0

Пробовал, и это не сработало. – jercra

0

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

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

+0

Проблема не в том, что PHP заботится о том, сколько точек есть. Это то, что клиент PHP не находится под моим контролем, и адрес жестко закодирован в http: // localhost/foo/bar, а IIS ожидает http: //localhost/foo/bar.asmx. Мне нужно, чтобы IIS понимал, что запросы без .asmx все равно должны обрабатываться. – jercra

+0

Это начинает подтверждать мою веру, почему в мире было бы хорошей идеей для любого клиента веб-службы или другого ресурса жестко закодировать URL-адрес ??? Изменение URL-адресов. Они должны перенести URL из некоторого хранилища конфигурации. –

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

это все.

+2

Простите меня, но даже PHP не может вызвать WSDL. WSDL просто описывает службу, которую позже будет вызывать PHP. WSDL обычно будет содержать URL-адрес фактического сервиса, который будет глупым .asmx-файлом. –

Смежные вопросы