O WinInet não tem suporte em um serviço ou em um aplicativo IIS

Aviso

O aplicativo da área de trabalho desativado e sem suporte do Internet Explorer 11 está programado para ser desativado permanentemente por meio de uma atualização do Microsoft Edge em certas versões do Windows 10. Para obter mais informações, consulte Perguntas frequentes sobre a desativação do aplicativo de área de trabalho do Internet Explorer 11.

As Funções de Internet do Microsoft Win32 (exportadas de WinInet.dll) não têm suporte quando executadas a partir de um serviço ou de um aplicativo IIS (Servidor de Informações da Internet) (também um serviço). Este artigo discute o uso do WinInet.dll em um serviço ou em aplicativos IIS.

Versão original do produto: Internet Explorer
Número de KB original: 238425

Informações adicionais

Como o IIS é um serviço, você terá o mesmo conjunto de problemas que executam o WinInet em uma extensão ISAPI (Internet Server Application Program Interface) ou em uma DLL COM--ActiveX usada por ASP (Active Server Pages)-- como na execução do WinInet em um serviço. Executar o WinInet em um aplicativo IIS também tem um conjunto exclusivo de problemas.

O problema com a execução do WinInet em um serviço é que o WinInet usa configurações do registro para informações de SSL, informações de proxy e muito mais. Os serviços não carregam o hive do HKEY_CURRENT_USER registro, portanto, essas informações não estão disponíveis.

Aviso

A Microsoft não dá suporte ao uso de APIs WinInet no contexto de um Serviço de Sistema.

As APIs WinInet relatam violações de acesso quando usadas do serviço no SSL com a Internet Explorer 5.0 instalada.

Para entender as limitações exclusivas para usar o WinInet em um ambiente de servidor, é necessário entender o histórico do WinInet. O WinInet foi desenvolvido para uso pela Internet Explorer. Na verdade, para usar versões posteriores do WinInet, você deve carregar uma instalação mínima de Explorer de Internet. O WinInet também expõe APIs para uso por outros aplicativos cliente que desejam acessar recursos na Internet (ou intranet). É importante reconhecer o ambiente no qual o WinInet foi desenvolvido e testado para entender o uso apropriado para a DLL. O WinInet foi desenvolvido para uso em um ambiente de cliente. Embora ele ainda esteja agindo como um cliente quando está em execução em uma DLL ISAPI, ele está em execução em um ambiente de servidor nesse caso.

Ambiente do cliente: uma pessoa executando o Explorer da Internet

  • Número relativamente baixo de solicitações
  • Solicitações feitas relativamente consecutivamente
  • O tempo de vida do aplicativo host é curto (duração da sessão do navegador)

Ambiente do servidor: um servidor Web (como https://www.microsoft.com)

  • Alto número de solicitações por segundo
  • Vários threads que fazem solicitações simultaneamente
  • Deve ser executado por semanas ou meses

A solução preferida é usar o WinHttp, que foi projetado para ser executado em um ambiente de serviço e, por ser uma pilha HTTP do lado do servidor, ela não está vinculada ao limite de conexão que é imposto pelo RFC 2616 que o http do lado do cliente acumula. Esse conjunto de API é semelhante no uso ao WinInet para que aqueles familiares ao WinInet encontrem facilidade para se adaptar.

Outra solução é usar soquetes diretamente no SDK da Plataforma inclui um exemplo que demonstra como usar o WinSock sobre o SSL. Você encontrará um exemplo na \Microsoft Platform SDK\Samples\Winbase\Security\Ssl pasta do SDK.

Outro problema a ser ciente ao usar o WinInet em um ambiente de servidor é o limite de duas conexões imposto pela Internet Explorer.

Embora seja possível usar o WinInet em um serviço e em um ambiente de servidor, ele não é recomendado nem tem suporte da Microsoft. O WinInet não foi testado nessa configuração e há problemas.