Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 instance des IIS-Kerns lädt, die die von IIS bereitgestellte Basiswebanwendung und Inhaltsbereitstellungsfunktionalität ist. Weitere Informationen zum Hosted Web Core finden Sie unter Referenz zur Hosted Web Core-API.
Sie müssen eine Konfigurationsdatei für Ihre Anwendung bereitstellen, die dem Format der ApplicationHost.config-Datei folgt. Sie sollten jedoch nicht Ihre tatsächliche ApplicationHost.config-Datei verwenden, da sie Einstellungen enthalten kann, die mit Ihren Websiteeinstellungen in Konflikt treten. Weitere Informationen zum Erstellen einer Konfigurationsdatei für Ihre Anwendung finden Sie unter Exemplarische Vorgehensweise: Erstellen einer Konfigurationsdatei für hosted Web Core.
In dieser exemplarischen Vorgehensweise werden u. a. die folgenden Aufgaben beschrieben:
Erstellen eines C++-Projekts für Ihre Anwendung.
Hinzufügen des C++-Codes für Ihre Anwendung.
Kompilieren und Testen Ihrer Anwendung.
Behandeln von Fehlern bei der Verwendung Ihrer Anwendung.
Voraussetzungen
Die folgende Software ist erforderlich, um die Schritte im Beispiel auszuführen:
- IIS 7.
Hinweis
Während Sie Ihre gehostete Web Core-Anwendung auf einem Computer ausführen müssen, auf dem IIS 7 installiert ist, müssen Sie die Beispielanwendung nicht auf einem Computer kompilieren, auf dem IIS 7 installiert ist. Sie können Ihre Anwendung unter einer anderen Version von Windows kompilieren und dann die 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 Schritte zur exemplarischen Vorgehensweise 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
Starten Sie Visual Studio 2005.
Vergewissern Sie sich, dass die globalen Optionen alle korrekten Pfade zum SDK enthalten:
Klicken Sie im Menü Extras auf Optionen.
Das Dialogfeld Optionen wird geöffnet.
Erweitern Sie den Knoten Projekte und Projektmappen in der Strukturansicht, und klicken Sie dann auf VC++-Verzeichnisse.
Wählen Sie im Feld Verzeichnisse anzeigen für die Option Dateien einschließen aus.
Vergewissern Sie sich, dass der Pfad, in dem Sie die SDK-Includedateien installiert haben, aufgeführt 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-Includedateien installiert haben.
Klicken Sie auf OK.
Erstellen Sie ein neues C++-Projekt:
Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Das Dialogfeld Neues Projekt wird angezeigt.
Erweitern Sie im Bereich Projekttypen den Knoten Visual C++ , und klicken Sie dann auf Win32.
Klicken Sie im Bereich Vorlagen auf Win32-Projekt.
Geben Sie im Feld Nameden Namen HostedWebTest ein.
Geben Sie im Feld Speicherort den Pfad für das Projekt ein.
Klicken Sie auf OK.
Der Win32-Anwendungs-Assistent wird geöffnet.
Klicken Sie auf Anwendungseinstellungen.
Klicken Sie unter Anwendungstyp auf Konsolenanwendung.
Klicken Sie auf Fertig stellen.
Visual Studio öffnet das Projekt HostWebTest.cpp.
Konfigurieren Sie das Projekt für die Kompilierung mithilfe der
__stdcall (/Gz)Aufrufkonvention:Klicken Sie im Menü Projekt auf HostedWebTest-Eigenschaften.
Erweitern Sie den Knoten Konfigurationseigenschaften in der Strukturansicht, erweitern Sie den Knoten C/C++ , und klicken Sie dann auf Erweitert.
Wählen Sie im Feld Konfiguration die Option Alle Konfigurationen aus.
Wählen Sie im Feld Anrufkonventiondie Option __stdcall (/Gz) aus.
Klicken Sie 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 ausgeführt.
Hinweis
In diesem Beispiel wird nach einer Datei namens HostedWebTest.config in Ihrem Inetsrv-Ordner 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 Exemplarische Vorgehensweise: Erstellen einer Konfigurationsdatei für hosted Web Core.
So fügen Sie den C++-Code für Ihre Anwendung hinzu
Öffnen Sie die Datei HostedWebTest.cpp, wenn sie noch nicht geöffnet ist, und entfernen Sie dann den gesamten vorhandenen C++-Code.
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; }Speichern Sie die Datei HostedWebTest.cpp.
Kompilieren und Testen der Anwendung
Nachdem Sie Ihre C++-Datei erstellt und gespeichert haben, besteht der nächste Schritt darin, Ihre 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
Kompilieren der Anwendung:
Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
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.
Öffnen Sie Windows Explorer, und suchen Sie den Ordner, den Sie beim Erstellen des C++-Projekts angegeben haben.
Abhängig von Ihren Buildoptionen sollte im Standardordner für Ihr Projekt ein Ordner mit dem Namen Debuggen oder Release angezeigt werden.
Suchen Sie im Ordner Debuggen oder Release die Datei mit dem Namen HostedWebTest.exe.
Vergewissern Sie sich, dass sich Ihre Konfigurationsdatei im entsprechenden Ordner für Ihre Anwendung befindet. Beispielsweise ist das weiter oben in dieser exemplarischen Vorgehensweise aufgeführte Codebeispiel so konzipiert, dass eine Datei namens HostedWebTest.config verwendet wird, die sich in Ihrem Inetsrv-Ordner befindet.
Öffnen Sie das Eingabeaufforderungsfenster, und wechseln Sie in den Pfad, in dem sich Ihre HostedWebTest.exe-Datei befindet.
Geben Sie HostedWebTest ein, und drücken Sie die EINGABETASTE, um die Anwendung zu starten.
Es sollte eine Ausgabe Ihrer Anwendung angezeigt werden, die in etwa wie folgt aussieht:
DLL loaded successfully. WebCoreActivate successfully resolved. WebCoreShutdown successfully resolved. Activating the Web core... WebCoreActivate was successful. Press any key to continue...Minimieren Sie das Eingabeaufforderungsfenster, ohne die Tasten auf der Tastatur zu drücken.
Abhängig von Ihren Konfigurationseinstellungen können Sie einen Webbrowser öffnen und zu der Website navigieren, die in Ihrer Konfigurationsdatei definiert ist.
Wenn Sie das Browsen zu Ihrer Website abgeschlossen haben, kehren Sie zum Eingabeaufforderungsfenster zurück, und drücken Sie die LEERTASTE.
Es sollte eine Ausgabe Ihrer Anwendung angezeigt werden, die in etwa wie folgt aussieht:
Shutting down the Web core... WebCoreShutdown was successful.
Fehler bei der Problembehandlung
Wenn Ihre Anwendung nicht geladen wird oder bei der Ausführung einen Fehler zurückgibt, helfen Ihnen die folgenden Schritte bei der Diagnose einiger der möglicherweise auftretenden Fehler.
So beheben Sie Fehler in Ihrer Anwendung
Wenn Ihre Anwendung den folgenden Fehler zurückgibt:
Could not load DLL. Error: 0x8007007eDies ist ein ERROR_MOD_NOT_FOUND status. Dieser Fehler gibt an, dass die Hwebcore.dll-Datei nicht gefunden werden 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: 0x8007000dDies ist ein ERROR_INVALID_DATA status. Dieser Fehler gibt an, dass Ihre Konfigurationsdatei nicht gefunden werden kann oder Fehler enthält. Weitere Fehlerbeschreibungen finden Sie im Windows-Ereignisanzeige.
Wenn Ihre Anwendung den folgenden Fehler zurückgibt:
DLL loaded successfully. WebCoreActivate successfully resolved. WebCoreShutdown successfully resolved. Activating the Web core... WebCoreActivate failed. Error: 0x800700b7Dies ist ein ERROR_ALREADY_EXISTS status. Dieser Fehler gibt an, dass Ihre Konfigurationsdatei geladen wurde, aber sie enthält doppelte Informationen. Beispielsweise haben Sie möglicherweise mehrere Anwendungspools definiert, oder Sie haben doppelte Websitebindungen erstellt. Weitere Fehlerbeschreibungen finden Sie im Windows-Ereignisanzeige.
Wenn Ihre Anwendung erfolgreich geladen wird, beim Durchsuchen der von Ihrer Anwendung gehosteten Website jedoch HTTP 404-Fehler angezeigt werden, sollten Sie die IIS-Protokolle, die von Ihrer Anwendung erstellt werden, auf die 404-Unterstatuscodes untersuchen. Im Folgenden finden Sie einige der Untergeordneten Statuscodes, die möglicherweise angezeigt werden:
404.3 "Denied by Mime Map": Dieser Unterstatuscode gibt an, dass der MIME-Typ für eine angeforderte Ressource nicht ordnungsgemäß konfiguriert ist. Dieser Code tritt beispielsweise auf, wenn Sie zu einer Datei mit einer .txt Dateinamenerweiterung navigieren und diese Erweiterung nicht der MIME-Zuordnung in Ihrer Konfigurationsdatei hinzugefügt haben.
404.4 "Kein Handler": Dieser Unterstatuscode gibt an, dass kein Handler für die angeforderte Ressource konfiguriert wurde. Dieser Code tritt beispielsweise auf, wenn Sie zu einer Datei mit einer .htm Dateinamenerweiterung navigieren und der Konfigurationsdatei den Handler für statische Dateien nicht hinzugefügt haben.
404.7 "Dateierweiterung verweigert": Dieser Unterstatuscode gibt an, dass die Dateinamenerweiterung durch die Anforderungsfilterung blockiert wurde. Dieser Code tritt beispielsweise auf, wenn Sie zu einer Datei mit einer .gif Dateinamenerweiterung navigieren und die Anforderungsfilterung so konfiguriert wurde, 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 Exemplarische Vorgehensweise: Erstellen einer Konfigurationsdatei für hosted Web Core.