Existe alguma configuração no IIS 7 que possa estar removendo a parte pathinfo da minha solicitação HTTP?

1

Encontrei um problema interessante que nunca encontrei com o XP ou o IIS 6.

Basicamente, não consigo fazer com que um servidor de serviço da Web nativo do Delphi (WebBroker) funcione com um cliente de serviço da Web nativo no Windows 7 de 64 bits.

Aqui está a análise mais básica. Se eu criar um novo aplicativo de serviço da Web no Delphi 2010 (ou qualquer versão, voltar para o Delphi 7) e acessá-lo usando o IE 8, posso ver o HTML que o componente WSDLHTMLPublish cria, mas nunca consigo acessar o SOAP. Da mesma forma, o importador WSDL também não pode acessar o SOAP. (Eu tenho IIS 7 configurado para usar um pool de aplicativos de 32 bits e criei um mapa de script de trabalho para os mapeamentos do manipulador. Resumindo, o serviço da Web ISAPI de 32 bits está em execução).

Por exemplo, eu tenho um servidor de serviço da Web simples chamado TestService (criado usando a interface de amostra padrão gerada quando você cria um novo servidor de serviço da Web).

Eu o instalei em um diretório virtual chamado scripts.

Se eu inserir o URL para o serviço na barra de endereço, o IIS 7 exibirá a página apropriada.

Se eu colocar meu mouse sobre o link WSDL para o ITestService, vejo a parte pathinfo na barra de status. No entanto, quando clico neste link, a barra de endereço mostra o URL completo com o pathinfo, mas só vejo o HTML de serviço (URL sem pathinfo). Parece não haver maneira de chegar à definição SOAP. O IIS 7 parece estar ignorando tudo após o nome do script (está ignorando o pathinfo).

Evidência adicional de que o IIS7 está sendo removido do pathinfo é que, se eu pausar meu mouse sobre o link ITestService, a barra de status mostrará a URL de serviço com uma string de consulta (no pathinfo). Clicar nesse link me leva a outra página HTML, aquela associada ao serviço e à string de consulta. No entanto, qualquer link que inclua um pathinfo após o nome do script, leva-me simplesmente ao URL base (no pathinfo).

Eu testei isso no Delphi 7, no Delphi 2010 e no Delphi XE, com os mesmos resultados (todos no Windows 7 Ultimate de 64 bits.

Acredito que o IIS7 esteja retirando o pathinfo, já que até mesmo o importador WSDL não pode acessar a definição SOAP. Eu obtenho os mesmos resultados com o Chrome. Em outras palavras, não parece ser um problema no navegador.

Este é um problema de configuração do IIS7?

    
por Cary Jensen 28.09.2010 / 12:35

2 respostas

3

O problema é que eu criei um mapeamento de script específico no Handling Mappings para a dll ISAPI. Isso fez com que o IIS redirecionasse todas as solicitações para a dll específica, motivo pelo qual qualquer solicitação que incluía uma parte de infopath foi ignorada. O infopath foi retirado.

O que eu realmente precisava fazer era simplesmente habilitar a permissão do recurso Execute do mapeamento do manipulador de mapeamento do módulo ISAPI-dll. Este mapeamento de módulo está disponível para um diretório virtual uma vez que você tenha permitido módulos ISAPI não especificados (ou módulos CGI, se esse for o tipo de extensão do servidor Web que você criou).

Para corrigir o meu problema, eu precisava

  1. Exclua o diretório cujos mapeamentos de manipulação foram danificados.

  2. Como eu já tinha permitido módulos ISAPI não especificados (selecione Editar configurações de recurso do miniaplicativo ISAPI e CGI Restrictions da seção IIS do servidor), precisei adicionar um novo diretório virtual para o site apropriado ( aqui é onde eu recriou o diretório que eu deletei no passo anterior.

  3. No applet Handling Mappings do diretório virtual, você provavelmente tem o mapeamento de manipulação de ISAPI-dll desabilitado. Selecione-o e selecione a opção Editar permissões de recurso no lado direito. Ative a caixa de seleção Executar.

Não edite o mapeamento de manipulação de ISAPI-dll e adicione um executável. Mesmo que esta caixa de diálogo diga que o Executável é opcional, uma vez que você adicionou um, acabou. Você nunca pode removê-lo (nunca consegui removê-lo). Em uma das minhas instalações de VM, eu tinha uma entrada executável nessa caixa de diálogo. Para se livrar dele, eu tive que desinstalar o IIS 7 e reinstalá-lo. (Talvez isso não seja necessário, mas não consegui descobrir como remover e reinstalar um mapeamento de módulo sem inserir a entrada Executável).

Além disso, se sua DLL ISAPI for uma DLL de 32 bits e você estiver trabalhando em um sistema operacional de 64 bits, será necessário habilitar aplicativos de 32 bits para o pool de aplicativos associado.

Espero que minha dor tenha ajudado alguém.

    
por 29.09.2010 / 13:25
0

Eu sei que esta pergunta é um pouco antiga, mas essa resposta pode ajudar alguém com o mesmo problema.

Quando você adiciona o Mapa de Script no Gerenciador do IIS, ele cria o manipulador no web.config da seguinte forma:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers accessPolicy="Read, Execute, Script">
            <add name="MyISAPI" path="myisapi" verb="*" modules="IsapiModule" scriptProcessor="C:\MyISAPI\myisapi_extension.dll" resourceType="Unspecified" requireAccess="Execute" preCondition="bitness32" />
        </handlers>
    </system.webServer>
</configuration>

O que você precisa fazer é adicionar o atributo allowPathInfo="true" ao manipulador. O Gerenciador do IIS não tem essa opção e você precisa editar o web.config manualmente:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers accessPolicy="Read, Execute, Script">
            <add name="MyISAPI" path="myisapi" verb="*" modules="IsapiModule" scriptProcessor="C:\MyISAPI\myisapi_extension.dll" resourceType="Unspecified" requireAccess="Execute" preCondition="bitness32" allowPathInfo="true" />
        </handlers>
    </system.webServer>
</configuration>

Dessa forma, você pode escolher o caminho de solicitação da extensão ISAPI (neste exemplo: link ); caso contrário, sem essa alteração, você precisará chamar a extensão ISAPI com o nome da DLL ( link )

    
por 08.02.2015 / 02:21

Tags