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.
Schreibt eine Nachricht in das IIS-Ablaufverfolgungsprotokoll.
Syntax
virtual
HRESULT
QuickTrace(
IN PCWSTR pszData1,
IN PCWSTR pszData2 = NULL,
IN HRESULT hrLastError = S_OK,
IN UCHAR Level = 4
) = 0;
Parameter
| Parameter | BESCHREIBUNG |
|---|---|
pszData1 |
Eine zu protokollierende Nachricht. |
pszData2 |
Eine zweite zu protokollierende Nachricht. |
hrLastError |
Die HRESULT zu protokollierende. Der Standardwert ist S_OK. |
level |
Die Ablaufverfolgungsebene. Die möglichen Werte sind 1 bis 7. Der Standardwert ist 4 (TRACE_LEVEL_INFORMATION). Weitere Informationen finden Sie im Abschnitt mit Hinweisen. |
Rückgabewert
HRESULT. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle.
| Wert | BESCHREIBUNG |
|---|---|
| S_OK | Gibt an, dass der Vorgang erfolgreich war. |
Bemerkungen
Die Ereignisablaufverfolgungsstufen 1 bis 5 entsprechen den ETW-Ablaufverfolgungsebenen (Event Tracing for Windows). Weitere Informationen zu diesen Ablaufverfolgungsebenen finden Sie in der EVENT_TRACE_HEADER-Struktur . Sie können auch Ablaufverfolgungsebene 6 (definiert als HTTP_TRACE_LEVEL_START in der Httptrace.h-Headerdatei) und Ablaufverfolgungsebene 7 (definiert als HTTP_TRACE_LEVEL_END in Httptrace.h) verwenden.
Beispiel
Im folgenden Beispiel wird veranschaulicht, wie Sie die IHttpRequest::SetUrl-Methode verwenden, um eine angeforderte URL in eine andere URL zu ändern und die Änderung mit der QuickTrace -Methode zu protokollieren.
Sie müssen die Ablaufverfolgung für Anforderung fehlgeschlagener Ereignisse aktivieren, um das Ereignis anzuzeigen.
HRESULT GLOBAL_MODULE::Initialize( VOID ){
return S_OK;
}
// CGlobalModule derived classes must implement Terminate
// And free memory
//
VOID GLOBAL_MODULE::Terminate( VOID){
delete this;
}
GLOBAL_NOTIFICATION_STATUS
GLOBAL_MODULE::OnGlobalPreBeginRequest(
IPreBeginRequestProvider* pProvider
)
{
HRESULT hr = S_OK;
IHttpContext* pContext = pProvider->GetHttpContext( );
IHttpRequest* pRequest = pContext->GetRequest( );
IHttpResponse* pResponse = pContext->GetResponse( );
PCWSTR rqUrl = pContext->GetRequest()->GetRawHttpRequest()->CookedUrl.pAbsPath;
OutputDebugStringW(rqUrl);
//
// Change only specific URL requests.
//
wchar_t URLask[] = L"/rPost.htm";
wchar_t URLreset[] = L"/Test.htm";
if(!wcscmp(rqUrl,URLask)){
hr = pRequest->SetUrl( URLreset, sizeof( URLreset )/sizeof(URLreset[0]) - 1, TRUE );
pContext->GetTraceContext( )->QuickTrace( L"URL change from rPost to", URLreset );
}
if( FAILED( hr ) )
goto Finished;
Finished:
if( FAILED( hr ) ){
pResponse->SetStatus( 500, "Internal Server Error", 0, hr );
return GL_NOTIFICATION_HANDLED;
}
return GL_NOTIFICATION_CONTINUE;
}
/*
#include "stdafx.h"
HRESULT GLOBAL_MODULE::Initialize( VOID ){
return S_OK;
}
// CGlobalModule derrived classes must implement Terminate
// And free memory
//
VOID GLOBAL_MODULE::Terminate( VOID){
delete this;
}
GLOBAL_NOTIFICATION_STATUS
GLOBAL_MODULE::OnGlobalPreBeginRequest(
IPreBeginRequestProvider* pProvider
)
{
HRESULT hr = S_OK;
IHttpContext* pContext = pProvider->GetHttpContext( );
IHttpRequest* pRequest = pContext->GetRequest( );
IHttpResponse* pResponse = pContext->GetResponse( );
PCWSTR rqUrl = pContext->GetRequest()->GetRawHttpRequest()->CookedUrl.pAbsPath;
OutputDebugStringW(rqUrl);
//
// Change only specific URL requests.
//
wchar_t URLask[] = L"/rPost.htm";
wchar_t URLreset[] = L"/Test.htm";
if(!wcscmp(rqUrl,URLask)){
hr = pRequest->SetUrl( URLreset, sizeof( URLreset )/sizeof(URLreset[0]) - 1, TRUE );
pContext->GetTraceContext( )->QuickTrace( L"URL change to test " );
}
if( FAILED( hr ) )
goto Finished;
Finished:
if( FAILED( hr ) ){
pResponse->SetStatus( 500, "Internal Server Error", 0, hr );
// returning GL_NOTIFICATION_HANDLED means end the request
return GL_NOTIFICATION_HANDLED;
}
return GL_NOTIFICATION_CONTINUE;
}
*/
int _tmain(int argc, _TCHAR* argv[])
{
printf("It works!");
return 0;
}
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create the module class.
class MyHttpModule : public CHttpModule
{
public:
REQUEST_NOTIFICATION_STATUS
OnBeginRequest(
IN IHttpContext * pHttpContext,
IN IHttpEventProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Retrieve a pointer to the request.
IHttpRequest * pHttpRequest = pHttpContext->GetRequest();
// Test for an error.
if (pHttpRequest != NULL)
{
// Specify an OPTIONS request method.
HRESULT hr = pHttpRequest->SetHttpMethod("OPTIONS");
// Test for an error.
if (FAILED(hr))
{
// Set the error status.
pProvider->SetErrorStatus( hr );
// End additional processing.
return RQ_NOTIFICATION_FINISH_REQUEST;
}
}
// Return processing to the pipeline.
return RQ_NOTIFICATION_CONTINUE;
}
};
// Create the module's class factory.
class MyHttpModuleFactory : public IHttpModuleFactory
{
public:
HRESULT
GetHttpModule(
OUT CHttpModule ** ppModule,
IN IModuleAllocator * pAllocator
)
{
UNREFERENCED_PARAMETER( pAllocator );
// Create a new instance.
MyHttpModule * pModule = new MyHttpModule;
// Test for an error.
if (!pModule)
{
// Return an error if the factory cannot create the instance.
return HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
}
else
{
// Return a pointer to the module.
*ppModule = pModule;
pModule = NULL;
// Return a success status.
return S_OK;
}
}
void Terminate()
{
// Remove the class from memory.
delete this;
}
};
// Create the module's exported registration function.
HRESULT
__stdcall
RegisterModule(
DWORD dwServerVersion,
IHttpModuleRegistrationInfo * pModuleInfo,
IHttpServer * pGlobalInfo
)
{
UNREFERENCED_PARAMETER( dwServerVersion );
UNREFERENCED_PARAMETER( pGlobalInfo );
// Set the request notifications and exit.
return pModuleInfo->SetRequestNotifications(
new MyHttpModuleFactory,
RQ_BEGIN_REQUEST,
0
);
}
Anforderungen
| type | BESCHREIBUNG |
|---|---|
| Client | – IIS 7.0 unter Windows Vista – IIS 7.5 unter Windows 7 – IIS 8.0 unter Windows 8 – IIS 10.0 unter Windows 10 |
| Server | – IIS 7.0 unter Windows Server 2008 – IIS 7.5 unter Windows Server 2008 R2 – IIS 8.0 unter Windows Server 2012 – IIS 8.5 unter Windows Server 2012 R2 – IIS 10.0 unter Windows Server 2016 |
| Produkt | – IIS 7.0, IIS 7.5, IIS 8.0, IIS 8.5, IIS 10.0 - IIS Express 7.5, IIS Express 8.0, IIS Express 10.0 |
| Header | Httpserv.h |