WinInet non è supportato in un servizio o in un'applicazione IIS

Importante

L'applicazione desktop Internet Explorer 11 verrà ritirata e non sarà più disponibile per il supporto il 15 giugno 2022 (per un elenco degli elementi nell'ambito, vedere le domande frequenti). Le stesse app e gli stessi siti di Internet Explorer 11 che usi oggi possono essere aperti Microsoft Edge in modalità Internet Explorer. Altre informazioni sono disponibili qui.

Le funzioni Internet di Microsoft Win32 (esportate da WinInet.dll) non sono supportate quando vengono eseguite da un servizio o da un'applicazione Internet Information Server (IIS) (anche un servizio). In questo articolo viene illustrato l'WinInet.dll in un servizio o in applicazioni IIS.

Versione originale del prodotto:   Internet Explorer
Numero KB originale:   238425

Ulteriori informazioni

Poiché IIS è un servizio, si avrà lo stesso insieme di problemi relativi all'esecuzione di WinInet in un'estensione ISAPI (Internet Server Application Program Interface) o in una DLL COM( dll ActiveX) utilizzata da pagine ASP (ASP), come nell'esecuzione di WinInet in un servizio. Anche l'esecuzione di WinInet in un'applicazione IIS presenta un set univoco di problemi.

Il problema con l'esecuzione di WinInet in un servizio è che WinInet usa le impostazioni del Registro di sistema per informazioni SSL, informazioni proxy e altro ancora. I servizi non caricano l'hive del HKEY_CURRENT_USER Registro di sistema, quindi queste informazioni non sono disponibili.

Avviso

Microsoft non supporta l'uso delle API WinInet nel contesto di un servizio di sistema.

Le API WinInet segnalano violazioni di accesso se usate dal servizio tramite SSL con Internet Explorer 5.0 installato.

Per comprendere le limitazioni dell'utilizzo di WinInet in un ambiente server, è necessario comprendere la cronologia di WinInet. WinInet è stato sviluppato per l'utilizzo da parte di Internet Explorer. Infatti, per usare le versioni successive di WinInet, devi caricare un'installazione minima di Internet Explorer. WinInet espone anche LE API per l'utilizzo da parte di altre applicazioni client che desiderano accedere alle risorse su Internet (o Intranet). È importante riconoscere l'ambiente in cui WinInet è stato sviluppato e testato per comprendere l'utilizzo appropriato per la DLL. WinInet è stato sviluppato per l'utilizzo in un ambiente client. Sebbene funzioni ancora come client quando è in esecuzione in una DLL ISAPI, in questo caso è in esecuzione in un ambiente server.

Ambiente client: utente che esegue Internet Explorer

  • Numero relativamente basso di richieste
  • Richieste effettuate in modo relativamente consecutivo
  • Durata dell'applicazione host breve (durata della sessione del browser)

Ambiente server: un server Web (ad esempio https://www.microsoft.com )

  • Numero elevato di richieste al secondo
  • Più thread che effettuano richieste contemporaneamente
  • Deve essere eseguito per settimane o mesi

La soluzione preferita consiste nell'utilizzare WinHttp, progettato per l'esecuzione in un ambiente di servizio, e poiché si tratta di uno stack HTTP sul lato server, non è associato al limite di due connessioni imposto da RFC 2616 che gli stack HTTP sul lato client. Questo set di API è simile nell'uso a WinInet, quindi i familiari di WinInet troveranno facile adattarsi.

Un'altra soluzione consiste nell'usare i socket direttamente in Platform SDK include un esempio che illustra come usare WinSock su SSL. Troverai un esempio nella \Microsoft Platform SDK\Samples\Winbase\Security\Ssl cartella dell'SDK.

Un altro problema da tenere presente quando si utilizza WinInet in un ambiente server è il limite di due connessioni imposto da Internet Explorer.

Sebbene sia possibile utilizzare WinInet in un servizio e in un ambiente server, non è consigliato né supportato da Microsoft. WinInet non è stato testato in questa configurazione e i problemi esistono.