Chamar um serviço da Web IIS sem a extensão .asmx
-
03-07-2019 - |
Pergunta
Eu escrevi um serviço da Web .NET que está a ser consumida por um fora cliente do meu controle (meu servidor é um simulador para um servidor ao vivo escrito em PHP). O serviço web funciona como desejado, mas o cliente não tem a capacidade de adicionar a extensão .asmx ou qualquer extensão para essa matéria, em suas chamadas. Eles basicamente usar http: // localhost / sabão / MyWebService enquanto espera IIS http: //localhost/soap/MyWebService.asmx . Existe alguma maneira de fazer IIS resposta a pedidos sem a extensão .asmx?
Solução
Adicionar um mapeamento de curinga, que rota vontade todas as solicitações através ASP.NET:
Você também vai precisar fazer alguma reescrita de URL, para permitir que o pedido http://localhost/soap/MyWebService
de entrada para mapear para http://localhost/soap/MyWebService.asmx
.
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
Basicamente, você poderia adicionar algo como o seguinte ao seu método Application_BeginRequest
:
string path = Request.Path;
if (path.Contains("/soap/") && !path.EndsWith(".asmx"))
Context.RewritePath(path + ".asmx");
Eu não testei (e é um hack), mas ele deve começar.
Outras dicas
Você também pode colocá-lo em um diretório, por si só, então no IIS defini-lo como um documento padrão.
No servidor: C: /mywebsite.com/mywebservice/mywebservice.asmx
No IIS mywebservice.asmx conjunto como um documento padrão
Parece-me que há algo muito errado com o cliente PHP. Eles não devem ser interepreting o URL para o serviço de qualquer forma. Seja qual for a URL é especificada na metadados servidor ou configuração do cliente é o URL que deve usar.
Eu não sei PHP, mas alguém pode me dizer por que isso faz algum sentido para PHP para cuidar quantos pontos existem em uma URL? Eu não posso ver que isso deveria importar para qualquer cliente se o meu serviço é em http: // localhost / foo / bar ou " http: // localhost / foo / barasmx PHP = 0 " .
No PHP você tem que chamar apenas o WSDL, você não precisa do asxm ou aquele tipo de coisas estúpidas que .net fazer.
Um exemplo simples
$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());
isso é tudo.