Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa procedura dettagliata illustra come creare un'applicazione console di Windows che usa le funzionalità Di base Web ospitate disponibili in IIS 7.
La funzionalità Hosted Web Core in IIS 7 consente di creare un'applicazione che carica un'istanza del core IIS, ovvero l'applicazione Web di base e la funzionalità di gestione del contenuto fornita da IIS. Per altre informazioni su Hosted Web Core, vedere Hosted Web Core API Reference (Informazioni di riferimento sull'API Web Core ospitata).
È necessario fornire un file di configurazione per l'applicazione che segue il formato del file ApplicationHost.config. Tuttavia, non è consigliabile usare il file di ApplicationHost.config effettivo, perché può contenere impostazioni in conflitto con le impostazioni del sito Web. Per altre informazioni su come creare un file di configurazione per l'applicazione, vedere Procedura dettagliata: Creazione di un file di configurazione per web core ospitato.
Di seguito vengono illustrate le attività incluse nella procedura dettagliata:
Creazione di un progetto C++ per l'applicazione.
Aggiunta del codice C++ per l'applicazione.
Compilazione e test dell'applicazione.
Risoluzione degli errori quando si usa l'applicazione.
Prerequisiti
Per completare i passaggi dell'esempio, è necessario il software seguente:
- IIS 7.
Nota
Anche se è necessario eseguire l'applicazione Hosted Web Core in un computer in cui è installato IIS 7, non è necessario compilare l'applicazione di esempio in un computer in cui è installato IIS 7. È possibile compilare l'applicazione in una versione diversa di Windows e quindi copiare l'applicazione in un computer in cui è installato IIS 7.
- Visual Studio 2005
Nota
È anche possibile usare Visual Studio .NET 2003 o versioni precedenti, anche se la procedura dettagliata potrebbe non essere identica.
Creazione di un'applicazione Web Core ospitata
In questa parte della procedura dettagliata si creerà un progetto di applicazione console C++ per l'applicazione.
Per creare un progetto C++ per l'applicazione
Avviare Visual Studio 2005.
Verificare che le opzioni globali abbiano tutti i percorsi corretti per l'SDK includono i file:
Scegliere Opzioni dal menu Strumenti.
Verrà visualizzata la finestra di dialogo Opzioni .
Espandere il nodo Progetti e soluzioni nella visualizzazione struttura ad albero e quindi fare clic su Directory VC++.
Nella casella Mostra directory per selezionare Includi file.
Verificare che sia elencato il percorso in cui è stato installato l'SDK include file. Se il percorso non è elencato, fare clic sull'icona Nuova riga e quindi aggiungere il percorso in cui è stato installato l'SDK include file.
Fare clic su OK.
Creare un nuovo progetto C++:
Scegliere Nuovo dal menu Filee quindi fare clic su Progetto.
Verrà visualizzata la finestra di dialogo Nuovo progetto .
Nel riquadro Tipi di progetto espandere il nodo Visual C++ e quindi fare clic su Win32.
Nel riquadro Modelli fare clic su Progetto Win32.
Nella casella Nome digitare HostedWebTest.
Nella casella Percorso digitare il percorso del progetto.
Fare clic su OK.
Verrà visualizzata la Creazione guidata applicazione Win32 .
Fare clic su Impostazioni applicazione.
In Tipo di applicazione fare clic su Applicazione console.
Fare clic su Fine.
Visual Studio apre il progetto HostWebTest.cpp.
Configurare il progetto per la compilazione usando la
__stdcall (/Gz)convenzione di chiamata:Scegliere Proprietà HostedWebTest dal menu Progetto.
Espandere il nodo Proprietà di configurazione nella visualizzazione albero, espandere il nodo C/C++ e quindi fare clic su Avanzate.
Nella casella Configurazione selezionare Tutte le configurazioni
Nella casella Convenzione di chiamata selezionare __stdcall (/Gz).
Fare clic su OK.
Aggiunta del codice per l'applicazione
In questa sezione viene illustrato come sostituire il codice aggiunto automaticamente al file C++ con codice che eseguirà Hosted Web Core.
Nota
Questo esempio cerca un file denominato HostedWebTest.config nella cartella Inetsrv. È possibile modificare il percorso e il nome del file, ma è necessario specificare un file di configurazione valido. Per altre informazioni su come creare un file di configurazione per l'applicazione, vedere Procedura dettagliata: Creazione di un file di configurazione per web core ospitato.
Per aggiungere il codice C++ per l'applicazione
Aprire il file HostedWebTest.cpp, se non è già aperto, quindi rimuovere tutto il codice C++ esistente.
Copiare il codice C++ seguente nel file:
#include "stdafx.h" #include <windows.h> #include <stdio.h> #include <conio.h> #include <hwebcore.h> // NOTE: Set the project's calling convention to "__stdcall (/Gz)". HRESULT _cdecl _tmain(int argc, _TCHAR* argv[]) { // Create a handle for the Web core DLL. HINSTANCE hDLL; // Specify the HRESULT for returning errors. HRESULT hr = S_OK; // Create arrays to hold paths. WCHAR wszInetPath[MAX_PATH]; WCHAR wszDllPath[MAX_PATH]; WCHAR wszCfgPath[MAX_PATH]; // Retrieve the path of the Inetsrv folder. DWORD nSize = ::ExpandEnvironmentStringsW( L"%windir%\\system32\\inetsrv",wszInetPath,MAX_PATH); // Exit if the path of the Inetsrv folder cannot be determined. if (nSize == 0) { // Retrieve the last error. hr = HRESULT_FROM_WIN32(GetLastError()); // Return an error status to the console. printf("Could not determine the path to the Inetsrv folder.\n"); printf("Error: 0x%x\n",hr); // Return an error from the application and exit. return hr; } // Append the Web core DLL name to the Inetsrv path. wcscpy_s(wszDllPath,MAX_PATH-1,wszInetPath); wcscat_s(wszDllPath,MAX_PATH-1,L"\\"); wcscat_s(wszDllPath,MAX_PATH-1,WEB_CORE_DLL_NAME); // Append the config file name to the Inetsrv path. wcscpy_s(wszCfgPath,MAX_PATH-1,wszInetPath); wcscat_s(wszCfgPath,MAX_PATH-1,L"\\HostedWebTest.config"); // Create a pointer to WebCoreActivate. PFN_WEB_CORE_ACTIVATE pfnWebCoreActivate = NULL; // Create a pointer to WebCoreShutdown. PFN_WEB_CORE_SHUTDOWN pfnWebCoreShutdown = NULL; // Load the Web core DLL. hDLL = ::LoadLibraryW(wszDllPath); // Test whether the Web core DLL was loaded successfully. if (hDLL == NULL) { // Retrieve the last error. hr = HRESULT_FROM_WIN32(GetLastError()); // Return an error status to the console. printf("Could not load DLL.\n"); printf("Error: 0x%x\n",hr); } else { // Return a success status to the console. printf("DLL loaded successfully.\n"); // Retrieve the address for "WebCoreActivate". pfnWebCoreActivate = (PFN_WEB_CORE_ACTIVATE)GetProcAddress( hDLL,"WebCoreActivate"); // Test for an error. if (pfnWebCoreActivate==NULL) { // Retrieve the last error. hr = HRESULT_FROM_WIN32(GetLastError()); // Return an error status to the console. printf("Could not resolve WebCoreActivate.\n"); printf("Error: 0x%x\n",hr); } else { // Return a success status to the console. printf("WebCoreActivate successfully resolved.\n"); // Retrieve the address for "WebCoreShutdown". pfnWebCoreShutdown = (PFN_WEB_CORE_SHUTDOWN)GetProcAddress( hDLL,"WebCoreShutdown"); // Test for an error. if (pfnWebCoreShutdown==NULL) { // Retrieve the last error. hr = HRESULT_FROM_WIN32(GetLastError()); // Return an error status to the console. printf("Could not resolve WebCoreShutdown.\n"); printf("Error: 0x%x\n",hr); } else { // Return a success status to the console. printf("WebCoreShutdown successfully resolved.\n"); // Return an activation status to the console. printf("Activating the Web core...\n"); // Activate the Web core. hr = pfnWebCoreActivate(wszCfgPath,L"",L"TestWebCore"); // Test for an error. if (FAILED(hr)) { // Return an error status to the console. printf("WebCoreActivate failed.\n"); printf("Error: 0x%x\n",hr); } else { // Return a success status to the console. printf("WebCoreActivate was successful.\n"); // Prompt the user to continue. printf("Press any key to continue...\n"); // Wait for a key press. int iKeyPress = _getch(); // Return a shutdown status to the console. printf("Shutting down the Web core...\n"); // Shut down the Web core. hr = pfnWebCoreShutdown(0L); // Test for an error. if (FAILED(hr)) { // Return an error status to the console. printf("WebCoreShutdown failed.\n"); printf("Error: 0x%x\n",hr); } else { // Return a success status to the console. printf("WebCoreShutdown was successful.\n"); } } } } // Release the DLL. FreeLibrary(hDLL); } // Return the application status. return hr; }Salvare il file HostedWebTest.cpp.
Compilazione e test dell'applicazione
Dopo aver creato e salvato il file C++, il passaggio successivo consiste nel compilare e testare l'applicazione.
Nota
Se non si compila l'applicazione in un computer in cui è installato IIS 7, sarà necessario copiare il file HostedWebTest.exe in un computer in cui è installato IIS 7 prima di testare l'applicazione.
Per compilare e testare l'applicazione
Compilare l'applicazione:
Nel menu Compila scegliere Compila soluzione.
Verificare che Visual Studio non restituisca errori o avvisi. Se vengono visualizzati errori o avvisi, è necessario risolvere questi problemi prima di testare il progetto.
Aprire Esplora risorse e individuare la cartella specificata al momento della creazione del progetto C++.
A seconda delle opzioni di compilazione, verrà visualizzata una cartella denominata Debug o Release nella cartella predefinita per il progetto.
All'interno della cartella Debug o Release individuare il file denominato HostedWebTest.exe.
Verificare che il file di configurazione si trova nella cartella appropriata per l'applicazione. Ad esempio, l'esempio di codice elencato in precedenza in questa procedura dettagliata è progettato per usare un file denominato HostedWebTest.config che si trova nella cartella Inetsrv.
Aprire la finestra del prompt dei comandi e passare alle directory nel percorso in cui si trova il file HostedWebTest.exe.
Digitare HostedWebTest e premere INVIO per avviare l'applicazione.
Verrà visualizzato l'output dell'applicazione simile al seguente:
DLL loaded successfully. WebCoreActivate successfully resolved. WebCoreShutdown successfully resolved. Activating the Web core... WebCoreActivate was successful. Press any key to continue...Ridurre al minimo la finestra del prompt dei comandi senza premere tasti sulla tastiera.
A seconda delle impostazioni di configurazione, è possibile aprire un Web browser e passare al sito Web definito nel file di configurazione.
Al termine dell'esplorazione del sito Web, tornare alla finestra del prompt dei comandi e premere BARRA SPAZIATRICE.
Verrà visualizzato l'output dell'applicazione simile al seguente:
Shutting down the Web core... WebCoreShutdown was successful.
Risoluzione dei problemi
Se l'applicazione non viene caricata o restituisce un errore durante l'esecuzione, la procedura seguente consente di diagnosticare alcuni degli errori che potrebbero verificarsi.
Per risolvere gli errori nell'applicazione
Se l'applicazione restituisce l'errore seguente:
Could not load DLL. Error: 0x8007007eSi tratta di uno stato di ERROR_MOD_NOT_FOUND. Questo errore indica che non è possibile individuare il file Hwebcore.dll. Questo errore si verificherà se IIS non è installato.
Se l'applicazione restituisce l'errore seguente:
DLL loaded successfully. WebCoreActivate successfully resolved. WebCoreShutdown successfully resolved. Activating the Web core... WebCoreActivate failed. Error: 0x8007000dSi tratta di uno stato di ERROR_INVALID_DATA. Questo errore indica che il file di configurazione non può essere individuato o contiene errori. Dovresti cercare in Windows Visualizzatore eventi ulteriori descrizioni degli errori.
Se l'applicazione restituisce l'errore seguente:
DLL loaded successfully. WebCoreActivate successfully resolved. WebCoreShutdown successfully resolved. Activating the Web core... WebCoreActivate failed. Error: 0x800700b7Si tratta di uno stato di ERROR_ALREADY_EXISTS. Questo errore indica che il file di configurazione è stato caricato, ma contiene informazioni duplicate. Ad esempio, è possibile che siano state definite più pool di applicazioni oppure che siano state create associazioni di siti Web duplicate. È consigliabile esaminare la Visualizzatore eventi di Windows per ulteriori descrizioni degli errori.
Se l'applicazione viene caricata correttamente, ma si ricevono errori HTTP 404 quando si esplora il sito Web ospitato dall'applicazione, è necessario esaminare i log IIS creati dall'applicazione per i codici di stato secondario 404. Ecco alcuni dei codici di stato secondario che potrebbero essere visualizzati:
404.3 "Denied by Mime Map": questo codice di stato secondario indica che il tipo MIME per una risorsa richiesta non è configurato correttamente. Ad esempio, questo codice verrà rilevato se si passa a un file con estensione .txt file e tale estensione non è stata aggiunta alla mappa MIME nel file di configurazione.
404.4 "Nessun gestore": questo codice di stato secondario indica che non è stato configurato alcun gestore per la risorsa richiesta. Ad esempio, questo codice verrà rilevato se si passa a un file con estensione .htm file e non è stato aggiunto il gestore di file statico al file di configurazione.
404.7 "Estensione file negata": questo codice di stato secondario indica che l'estensione del nome file è stata bloccata dal filtro delle richieste. Ad esempio, questo codice verrà visualizzato se si passa a un file con estensione .gif nome file e il filtro delle richieste è stato configurato per negare l'accesso ai file con tale estensione.
Ognuno di questi errori indica un problema con le impostazioni nel file di configurazione dell'applicazione. Per altre informazioni, vedere Procedura dettagliata: Creazione di un file di configurazione per Web Core ospitato.