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?

Foi útil?

Solução

Adicionar um mapeamento de curinga, que rota vontade todas as solicitações através ASP.NET:

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

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

Na web: http://mywebsite.com/mywebservice

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top