Partager via


Procédure pas à pas : création d’une application web principale hébergée

Cette procédure pas à pas montre comment créer une application console Windows qui utilise les fonctionnalités Web Core hébergées disponibles dans IIS 7.

La fonctionnalité Hosted Web Core dans IIS 7 vous permet de créer une application qui charge un instance du noyau IIS, qui est l’application web de base et la fonctionnalité de service de contenu fournie par IIS. Pour plus d’informations sur hosted Web Core, consultez Informations de référence sur l’API Hosted Web Core.

Vous devez fournir un fichier de configuration pour votre application qui suit le format du fichier ApplicationHost.config. Toutefois, vous ne devez pas utiliser votre fichier ApplicationHost.config réel, car il peut contenir des paramètres qui entrent en conflit avec les paramètres de votre site Web. Pour plus d’informations sur la création d’un fichier de configuration pour votre application, consultez Procédure pas à pas : création d’un fichier de configuration pour Hosted Web Core.

Cette procédure pas à pas décrit les tâches suivantes :

  • Création d’un projet C++ pour votre application.

  • Ajout du code C++ pour votre application.

  • Compilation et test de votre application.

  • Résolution des erreurs lorsque vous utilisez votre application.

Prérequis

Le logiciel suivant est requis pour effectuer les étapes de l’exemple :

  • IIS 7.

Notes

Bien que vous devrez exécuter votre application Web Core hébergée sur un ordinateur sur lequel IIS 7 est installé, vous n’avez pas besoin de compiler l’exemple d’application sur un ordinateur sur lequel IIS 7 est installé. Vous pouvez compiler votre application sur une autre version de Windows, puis la copier sur un ordinateur sur lequel IIS 7 est installé.

  • Visual Studio 2005 :

Notes

Vous pouvez également utiliser Visual Studio .NET 2003 ou une version antérieure, bien que les étapes pas à pas ne soient pas identiques.

Création d’une application Web Core hébergée

Dans cette partie de la procédure pas à pas, vous allez créer un projet d’application console C++ pour votre application.

Pour créer un projet C++ pour votre application

  1. Démarrez Visual Studio 2005.

  2. Vérifiez que les options globales ont tous les chemins d’accès corrects aux fichiers include du SDK :

    1. Dans le menu Outils , cliquez sur Options.

      La boîte de dialogue Options s'ouvre.

    2. Développez le nœud Projets et solutions dans l’arborescence, puis cliquez sur Répertoires VC++.

    3. Dans la zone Afficher les répertoires pour , sélectionnez Inclure des fichiers.

    4. Vérifiez que le chemin d’accès où vous avez installé les fichiers include du SDK est répertorié. Si le chemin d’accès n’est pas répertorié, cliquez sur l’icône Nouvelle ligne , puis ajoutez le chemin d’accès où vous avez installé les fichiers include du SDK.

    5. Cliquez sur OK.

  3. Créez un projet C++ :

    1. Dans le menu Fichier , pointez sur Nouveau, puis cliquez sur Projet.

      La boîte de dialogue Nouveau projet s’affiche.

    2. Dans le volet Types de projets , développez le nœud Visual C++ , puis cliquez sur Win32.

    3. Dans le volet Modèles , cliquez sur Projet Win32.

    4. Dans la zone Nom , tapez HostedWebTest.

    5. Dans la zone Emplacement , tapez le chemin d’accès du projet.

    6. Cliquez sur OK.

      L’Assistant Application Win32 s’ouvre.

    7. Cliquez sur Paramètres de l’application.

    8. Sous Type d’application, cliquez sur Application console.

    9. Cliquez sur Terminer.

      Visual Studio ouvre le projet HostWebTest.cpp.

  4. Configurez le projet pour qu’il soit compilé à l’aide de la convention d’appel __stdcall (/Gz) :

    1. Dans le menu Projet , cliquez sur HostedWebTest Properties.

    2. Développez le nœud Propriétés de configuration dans l’arborescence, développez le nœud C/C++ , puis cliquez sur Avancé.

    3. Dans la zone Configuration , sélectionnez Toutes les configurations.

    4. Dans la zone Convention d’appel, sélectionnez __stdcall (/Gz).

    5. Cliquez sur OK.

Ajout du code pour l’application

Cette section montre comment remplacer le code qui a été automatiquement ajouté à votre fichier C++ par du code qui exécutera le composant Web Core hébergé.

Notes

Cet exemple recherche un fichier nommé HostedWebTest.config dans votre dossier Inetsrv. Vous pouvez modifier le chemin d’accès et le nom de fichier, mais vous devez fournir un fichier de configuration valide. Pour plus d’informations sur la création d’un fichier de configuration pour votre application, consultez Procédure pas à pas : création d’un fichier de configuration pour Hosted Web Core.

Pour ajouter le code C++ pour votre application

  1. Ouvrez le fichier HostedWebTest.cpp, s’il n’est pas déjà ouvert, puis supprimez tout le code C++ existant.

  2. Copiez le code C++ suivant dans le fichier :

    #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;
    }
    
  3. Enregistrez le fichier HostedWebTest.cpp.

Compilation et test de l’application

Après avoir créé et enregistré votre fichier C++, l’étape suivante consiste à compiler et tester votre application.

Notes

Si vous ne compilez pas votre application sur un ordinateur sur lequel IIS 7 est installé, vous devez copier le fichier HostedWebTest.exe sur un ordinateur sur lequel IIS 7 est installé avant de tester l’application.

Pour compiler et tester votre application

  1. Compiler l’application :

    1. Dans le menu Générer, cliquez sur Générer la solution.

    2. Vérifiez que Visual Studio n’a pas retourné d’erreurs ou d’avertissements. Si vous voyez des erreurs ou des avertissements, vous devrez résoudre ces problèmes avant de tester le projet.

  2. Ouvrez Windows Explorer et recherchez le dossier que vous avez spécifié lors de la création du projet C++.

    Selon vos options de build, vous devez voir un dossier nommé Debug ou Release dans le dossier par défaut de votre projet.

  3. Dans le dossier Debug ou Release , recherchez le fichier nommé HostedWebTest.exe.

  4. Vérifiez que votre fichier de configuration se trouve dans le dossier approprié pour votre application. Par exemple, l’exemple de code répertorié précédemment dans cette procédure pas à pas est conçu pour utiliser un fichier nommé HostedWebTest.config qui se trouve dans votre dossier Inetsrv.

  5. Ouvrez la fenêtre d’invite de commandes et remplacez les répertoires par le chemin d’accès où se trouve votre fichier HostedWebTest.exe.

  6. Tapez HostedWebTest et appuyez sur ENTRÉE pour démarrer l’application.

  7. Vous devez voir une sortie de votre application semblable à ce qui suit :

    DLL loaded successfully.
    WebCoreActivate successfully resolved.
    WebCoreShutdown successfully resolved.
    Activating the Web core...
    WebCoreActivate was successful.
    Press any key to continue...
    
  8. Réduisez la fenêtre d’invite de commandes sans appuyer sur les touches du clavier.

  9. En fonction de vos paramètres de configuration, vous pouvez ouvrir un navigateur web et accéder au site Web défini dans votre fichier de configuration.

  10. Une fois que vous avez terminé d’accéder à votre site Web, revenez à la fenêtre d’invite de commandes et appuyez sur ESPACE.

  11. Vous devez voir une sortie de votre application semblable à ce qui suit :

    Shutting down the Web core...
    WebCoreShutdown was successful.
    

Résolution des erreurs

Si votre application ne se charge pas ou qu’elle retourne une erreur lors de son exécution, les étapes suivantes vous aideront à diagnostiquer certaines des erreurs que vous pouvez rencontrer.

Pour résoudre les erreurs dans votre application

  • Si votre application retourne l’erreur suivante :

    Could not load DLL.
    Error: 0x8007007e
    

    C’est un ERROR_MOD_NOT_FOUND status. Cette erreur indique que le fichier Hwebcore.dll est introuvable. Cette erreur se produit si IIS n’est pas installé.

  • Si votre application retourne l’erreur suivante :

    DLL loaded successfully.
    WebCoreActivate successfully resolved.
    WebCoreShutdown successfully resolved.
    Activating the Web core...
    WebCoreActivate failed.
    Error: 0x8007000d
    

    Il s’agit d’une ERROR_INVALID_DATA status. Cette erreur indique que votre fichier de configuration est introuvable ou contient des erreurs. Vous devez rechercher des descriptions d’erreurs supplémentaires dans le observateur d'événements Windows.

  • Si votre application retourne l’erreur suivante :

    DLL loaded successfully.
    WebCoreActivate successfully resolved.
    WebCoreShutdown successfully resolved.
    Activating the Web core...
    WebCoreActivate failed.
    Error: 0x800700b7
    

    C’est un ERROR_ALREADY_EXISTS status. Cette erreur indique que votre fichier de configuration a été chargé, mais qu’il contient des informations en double. Par exemple, vous avez peut-être défini plusieurs pools d’applications, ou vous avez peut-être créé des liaisons de site Web en double. Vous devez examiner les observateur d'événements Windows pour obtenir des descriptions d’erreurs supplémentaires.

  • Si votre application se charge correctement, mais que vous recevez des erreurs HTTP 404 lorsque vous parcourez le site Web hébergé par votre application, vous devez examiner les journaux IIS créés par votre application pour les codes de sous-état 404. Voici quelques-uns des codes de sous-état que vous pouvez voir :

    • 404.3 « Refusé par Mime Map » : ce code de sous-état indique que le type MIME pour une ressource demandée n’est pas correctement configuré. Par exemple, vous rencontrerez ce code si vous accédez à un fichier qui a une extension de nom de fichier .txt et que vous n’avez pas ajouté cette extension au mappage MIME dans votre fichier de configuration.

    • 404.4 « Aucun gestionnaire » : ce code de sous-état indique qu’aucun gestionnaire n’a été configuré pour la ressource demandée. Par exemple, vous rencontrerez ce code si vous accédez à un fichier qui a une extension de nom de fichier .htm et que vous n’avez pas ajouté le gestionnaire de fichiers statiques à votre fichier de configuration.

    • 404.7 « Extension de fichier refusée » : ce code de sous-état indique que l’extension de nom de fichier a été bloquée par le filtrage des demandes. Par exemple, vous rencontrerez ce code si vous accédez à un fichier qui a une extension de nom de fichier .gif et que le filtrage des demandes a été configuré pour refuser l’accès aux fichiers qui ont cette extension.

      Chacune de ces erreurs indique un problème avec les paramètres dans le fichier de configuration de votre application. Pour plus d’informations, consultez Procédure pas à pas : création d’un fichier de configuration pour Hosted Web Core.

Voir aussi