Freigeben über


Exemplarische Vorgehensweise: Erstellen einer gehosteten Web Core-Anwendung

In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie Sie eine Windows-Konsolenanwendung erstellen, die die gehosteten Web Core-Features verwendet, die in IIS 7 verfügbar sind.

Mit der Gehosteten Web Core-Funktionalität in IIS 7 können Sie eine Anwendung erstellen, die eine Instanz des IIS-Kerns lädt. Dabei handelt es sich um die Basiswebanwendung und inhaltsbasierte Funktionalität, die von IIS bereitgestellt wird. Weitere Informationen zum gehosteten Web Core finden Sie unter Hosted Web Core API Reference.

Sie müssen eine Konfigurationsdatei für Ihre Anwendung bereitstellen, die dem Format der ApplicationHost.config-Datei folgt. Sie sollten ihre eigentliche ApplicationHost.config Datei jedoch nicht verwenden, da sie Einstellungen enthalten kann, die mit Ihren Websiteeinstellungen in Konflikt geraten. Weitere Informationen zum Erstellen einer Konfigurationsdatei für Ihre Anwendung finden Sie unter Walkthrough: Creating a Configuration File for Hosted Web Core.

Die in dieser exemplarischen Vorgehensweise veranschaulichten Aufgaben umfassen Folgendes:

  • Erstellen eines C++-Projekts für Ihre Anwendung.

  • Hinzufügen des C++-Codes für Ihre Anwendung.

  • Kompilieren und Testen Ihrer Anwendung.

  • Beheben von Fehlern bei Verwendung der Anwendung.

Voraussetzungen

Die folgende Software ist erforderlich, um die Schritte im Beispiel auszuführen:

  • IIS 7.

Hinweis

Sie müssen Ihre gehostete Web Core-Anwendung zwar auf einem Computer ausführen, auf dem IIS 7 installiert ist, aber Sie müssen die Beispielanwendung nicht auf einem Computer kompilieren, auf dem IIS 7 installiert ist. Sie können Ihre Anwendung auf einer anderen Version von Windows kompilieren und dann ihre Anwendung auf einen Computer kopieren, auf dem IIS 7 installiert ist.

  • Visual Studio 2005.

Hinweis

Sie können auch Visual Studio .NET 2003 oder früher verwenden, obwohl die exemplarischen Vorgehensweisen möglicherweise nicht identisch sind.

Erstellen einer gehosteten Web Core-Anwendung

In diesem Teil der exemplarischen Vorgehensweise erstellen Sie ein C++-Konsolenanwendungsprojekt für Ihre Anwendung.

So erstellen Sie ein C++-Projekt für Ihre Anwendung

  1. Starten Sie Visual Studio 2005.

  2. Stellen Sie sicher, dass die globalen Optionen alle richtigen Pfade zu den SDK-Include-Dateien enthalten.

    1. Klicken Sie im Menü Extras auf Optionen.

      Das Dialogfeld "Optionen " wird geöffnet.

    2. Erweitern Sie den Knoten Projekte und Lösungen in der Strukturansicht, und klicken Sie dann auf VC++-Verzeichnisse.

    3. Wählen Sie im Feld "Verzeichnisse anzeigen" die Option "Dateien einschließen" aus.

    4. Vergewissern Sie sich, dass der Pfad, in den Sie das SDK installiert haben, die Include-Dateien aufgelistet ist. Wenn der Pfad nicht aufgeführt ist, klicken Sie auf das Symbol Neue Zeile und fügen Sie dann den Pfad hinzu, in dem Sie die SDK-Include-Dateien installiert haben.

    5. Klicke auf OK.

  3. Erstellen eines neuen C++-Projekts:

    1. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

      Das Dialogfeld "Neues Projekt " wird geöffnet.

    2. Erweitern Sie im Bereich "Projekttypen " den Visual C++ -Knoten, und klicken Sie dann auf Win32.

    3. Klicken Sie im Bereich "Vorlagen " auf "Win32-Projekt".

    4. Geben Sie im Feld NameHostedWebTest ein.

    5. Geben Sie im Feld "Ort" den Pfad für das Projekt ein.

    6. Klicke auf OK.

      Der Win32-Anwendungs-Assistent wird geöffnet.

    7. Klicken Sie auf "Anwendungseinstellungen".

    8. Klicken Sie unter "Anwendungstyp" auf "Konsolenanwendung".

    9. Klicken Sie auf Fertig stellen.

      Visual Studio öffnet das HostWebTest.cpp Projekt.

  4. Konfigurieren Sie das Projekt so, dass es mithilfe der __stdcall (/Gz) Aufrufkonvention kompiliert wird:

    1. Klicken Sie im Menü "Projekt " auf "HostedWebTest-Eigenschaften".

    2. Erweitern Sie den Knoten "Konfigurationseigenschaften " in der Strukturansicht, erweitern Sie den C/C++ -Knoten, und klicken Sie dann auf "Erweitert".

    3. Wählen Sie im Feld "Konfiguration" die Option "Alle Konfigurationen" aus.

    4. Wählen Sie im Feld " Anrufkonvention " __stdcall (/Gz) aus.

    5. Klicke auf OK.

Hinzufügen des Codes für die Anwendung

In diesem Abschnitt wird gezeigt, wie Sie den Code ersetzen, der ihrer C++-Datei automatisch hinzugefügt wurde, durch Code, der den gehosteten Web Core ausführt.

Hinweis

In diesem Beispiel wird nach einer Datei namens HostedWebTest.config im Ordner "Inetsrv" gesucht. Sie können den Pfad und dateinamen ändern, aber Sie müssen eine gültige Konfigurationsdatei angeben. Weitere Informationen zum Erstellen einer Konfigurationsdatei für Ihre Anwendung finden Sie unter Walkthrough: Creating a Configuration File for Hosted Web Core.

So fügen Sie den C++-Code für Ihre Anwendung hinzu

  1. Öffnen Sie die datei HostedWebTest.cpp, falls sie noch nicht geöffnet ist, und entfernen Sie dann den gesamten vorhandenen C++-Code.

  2. Kopieren Sie den folgenden C++-Code in die Datei:

    #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. Speichern Sie die HostedWebTest.cpp Datei.

Kompilieren und Testen der Anwendung

Nach dem Erstellen und Speichern der C++-Datei besteht der nächste Schritt darin, Die Anwendung zu kompilieren und zu testen.

Hinweis

Wenn Sie Ihre Anwendung nicht auf einem Computer kompilieren, auf dem IIS 7 installiert ist, müssen Sie die HostedWebTest.exe-Datei auf einen Computer kopieren, auf dem IIS 7 installiert ist, bevor Sie die Anwendung testen.

So kompilieren und testen Sie Ihre Anwendung

  1. Kompilieren Sie die Anwendung:

    1. Klicken Sie im Menü "Erstellen" auf "Lösung erstellen".

    2. Stellen Sie sicher, dass Visual Studio keine Fehler oder Warnungen zurückgegeben hat. Wenn Fehler oder Warnungen angezeigt werden, müssen Sie diese Probleme beheben, bevor Sie das Projekt testen.

  2. Öffnen Sie Windows Explorer, und suchen Sie den Ordner, den Sie beim Erstellen des C++-Projekts angegeben haben.

    Je nach Buildoptionen sollte ein Ordner mit dem Namen "Debuggen " oder " Release " im Standardordner für Ihr Projekt angezeigt werden.

  3. Suchen Sie im Ordner "Debug " oder "Release " die Datei mit dem Namen HostedWebTest.exe.

  4. Stellen Sie sicher, dass sich Ihre Konfigurationsdatei im entsprechenden Ordner für Ihre Anwendung befindet. Das weiter oben in dieser exemplarischen Vorgehensweise aufgeführte Codebeispiel dient beispielsweise dazu, eine Datei mit dem Namen HostedWebTest.config zu verwenden, die sich im Ordner "Inetsrv" befindet.

  5. Öffnen Sie das Eingabeaufforderungsfenster und wechseln Sie das Verzeichnis zu dem Pfad, wo sich Ihre Datei HostedWebTest.exe befindet.

  6. Geben Sie HostedWebTest ein, und drücken Sie die EINGABETASTE, um die Anwendung zu starten.

  7. Die Ausgabe Ihrer Anwendung sollte in etwa wie folgt aussehen:

    DLL loaded successfully.
    WebCoreActivate successfully resolved.
    WebCoreShutdown successfully resolved.
    Activating the Web core...
    WebCoreActivate was successful.
    Press any key to continue...
    
  8. Minimieren Sie das Eingabeaufforderungsfenster, ohne die Tasten auf der Tastatur zu drücken.

  9. Je nach Ihren Konfigurationseinstellungen können Sie einen Webbrowser öffnen und zu der Website navigieren, die in Ihrer Konfigurationsdatei definiert ist.

  10. Wenn Sie mit dem Browsen zu Ihrer Website fertig sind, kehren Sie zum Eingabeaufforderungsfenster zurück, und drücken Sie die LEERTASTE.

  11. Die Ausgabe Ihrer Anwendung sollte wie folgt aussehen:

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

Fehlerbehebung

Wenn Ihre Anwendung nicht geladen wird oder ein Fehler zurückgegeben wird, wenn sie ausgeführt wird, helfen Ihnen die folgenden Schritte bei der Diagnose einiger fehler, die möglicherweise auftreten.

So beheben Sie Fehler in Ihrer Anwendung

  • Wenn ihre Anwendung den folgenden Fehler zurückgibt:

    Could not load DLL.
    Error: 0x8007007e
    

    Dies ist ein ERROR_MOD_NOT_FOUND Status. Dieser Fehler weist darauf hin, dass sich die Hwebcore.dll Datei nicht befinden kann. Dieser Fehler tritt auf, wenn IIS nicht installiert ist.

  • Wenn ihre Anwendung den folgenden Fehler zurückgibt:

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

    Dies ist ein ERROR_INVALID_DATA Status. Dieser Fehler gibt an, dass ihre Konfigurationsdatei nicht gefunden werden kann oder Fehler enthält. Sie sollten in der Windows-Ereignisanzeige nach zusätzlichen Fehlerbeschreibungen suchen.

  • Wenn ihre Anwendung den folgenden Fehler zurückgibt:

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

    Dies ist ein ERROR_ALREADY_EXISTS Status. Dieser Fehler gibt an, dass Ihre Konfigurationsdatei geladen wurde, aber doppelte Informationen enthält. Beispielsweise haben Sie möglicherweise mehrere Anwendungspools definiert, oder Sie haben doppelte Websitebindungen erstellt. Sie sollten die Windows-Ereignisanzeige auf weitere Fehlerbeschreibungen überprüfen.

  • Wenn Ihre Anwendung erfolgreich geladen wird, Sie jedoch HTTP 404-Fehler erhalten, wenn Sie die Website durchsuchen, die Ihre Anwendung hostet, sollten Sie die von Ihrer Anwendung erstellten IIS-Protokolle auf die 404-Unterstatuscodes hin überprüfen. Nachfolgend sind einige der Unterstatuscodes aufgeführt, die möglicherweise angezeigt werden:

    • 404.3 "Von MIME-Zuordnung blockiert" – Dieser Unterstatuscode gibt an, dass der MIME-Typ für eine angeforderte Ressource nicht ordnungsgemäß konfiguriert ist. Wenn Sie zum Beispiel auf eine Datei zugreifen, die die Dateiendung .txt hat, und Sie diese Erweiterung der MIME-Zuordnung in Ihrer Konfigurationsdatei nicht hinzugefügt haben.

    • 404.4 "No Handler" – Dieser Unterstatuscode gibt an, dass kein Handler für die angeforderte Ressource konfiguriert wurde. Wenn Sie beispielsweise zu einer Datei navigieren, die über eine .htm Dateinamenerweiterung verfügt, und Sie der Konfigurationsdatei keinen statischen Dateihandler hinzugefügt haben, tritt dieser Code auf.

    • 404.7 "Dateierweiterung verweigert" – Dieser Unterstatuscode gibt an, dass die Dateinamenerweiterung durch Anforderungsfilterung blockiert wurde. Wenn Sie beispielsweise zu einer Datei navigieren, die die Dateinamenerweiterung .gif hat, und die Anforderungsfilterung ist so konfiguriert worden, dass der Zugriff auf Dateien mit dieser Erweiterung verweigert wird.

      Jeder dieser Fehler weist auf ein Problem mit den Einstellungen in der Konfigurationsdatei Ihrer Anwendung hin. Weitere Informationen finden Sie unter Walkthrough: Creating a Configuration File for Hosted Web Core.

Siehe auch