HTTP_TRACE_EVENT-Struktur
Enthält Ablaufverfolgungsinformationen, die von Ablaufverfolgungsanbietern zurückgegeben werden.
Syntax
struct HTTP_TRACE_EVENT{
LPCGUID pProviderGuid;
DWORD dwArea;
LPCGUID pAreaGuid;
DWORD dwEvent;
LPCWSTR pszEventName;
DWORD dwEventVersion;
DWORD dwVerbosity;
LPCGUID pActivityGuid;
LPCGUID pRelatedActivityGuid;
DWORD dwTimeStamp;
DWORD dwFlags;
DWORD cEventItems;
__field_ecount(cEventItems) HTTP_TRACE_EVENT_ITEM * pEventItems;
};
Members
Membername | Beschreibung |
---|---|
pProviderGuid |
Ein LPCGUID , der den Bezeichner des Anbieters enthält. Mögliche Werte sind unter anderem die Werte im Abschnitt Ablaufverfolgungs-GUIDs, die unter Ablaufverfolgungskonstanten definiert sind. |
dwArea |
Eine DWORD , die den Interessenbereich für das Ereignis enthält. Der Bereichswert sollte eine positive ganze Zahl sein. |
pAreaGuid |
Ein LPCGUID , der den Interessenbereich angibt. |
dwEvent |
Ein DWORD , der den eindeutigen Bezeichner des Ereignisses für den Ereignisanbieter enthält. |
pszEventName |
Ein LPCWSTR , der den Namen des Ereignisses enthält. Dieser Wert wird vom Ereignisanbieter festgelegt, um eine Beschreibung des Ereignistyps zu erhalten. |
dwEventVersion |
Eine DWORD , die die Ereignisversion enthält. Normalerweise 0 oder 1, kann jedoch einen beliebigen nicht negativen ganzzahligen Wert enthalten. |
dwVerbosity |
Ein DWORD , der numerische Werte ihren ausführlichen Entsprechungen zuordnet (die Werte 0 bis 5 werden allgemein, FatalError, Error, Warning, Info und Ausführlich zugeordnet). |
pActivityGuid |
Ein LPCGUID , der den eindeutigen Anforderungsbezeichner enthält. |
pRelatedActivityGuid |
Ein LPCGUID , der einen Wert zum Zuordnen verwandter Aktivitäten enthält. Die meisten Anbieter legen diesen Wert auf NULL fest und erlauben dann IIS, den Wert aufzufüllen, bevor das Ereignis an Ereignislistener gesendet wird. |
dwTimeStamp |
Ein DWORD , der den optionalen Zeitstempel enthält, dargestellt durch eine interne Teilstrichanzahl. |
dwFlags |
Eine DWORD , die zusätzliche Flags enthält. Die meisten Anbieter legen diesen Wert auf HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS fest, der im Abschnitt Ablaufverfolgungskonstanten beschrieben wird, der unter Ablaufverfolgungskonstanten definiert ist. |
cEventItems |
Ein DWORD , der die Anzahl der Elemente im pEventItems Array enthält. |
pEventItems |
Ein Array von HTTP_TRACE_EVENT_ITEM Strukturstrukturen der Länge cEventItems . |
Bemerkungen
Die meisten Member der HTTP_TRACE_EVENT
Struktur sind direkt ETW-Ereignissen (Event Tracing for Windows) zugeordnet. Die dwArea
Member und pAreaGuid
sind für IIS eindeutig.
Von CGlobalModule abgeleitete Klassen, die sich für GL_TRACE_EVENT Ereignistypen registrieren, erhalten einen IGlobalTraceEventProvider-Zeiger als Parameter für die reine virtual
CGlobalModule::OnGlobalTraceEvent-Methode. Sie können dann einen HTTP_TRACE_EVENT
Zeiger abrufen, indem Sie die IGlobalTraceEventProvider::GetTraceEvent-Methode aufrufen, für die Sie einen Zeiger auf die Adresse einer NULL-Struktur HTTP_TRACE_EVENT
angeben.
Weitere Informationen finden Sie unter Ablaufverfolgungskonstanten.
Die dwArea
Member und pAreaGuid
enthalten zwei verschiedene Konstanten für den Bereich, der für ein Ereignis von Interesse ist.
Beispiel
Im folgenden Beispiel wird die HTTP_TRACE_EVENT
-Struktur aufgefüllt und die IHttpTraceContext::RaiseTraceEvent-Methode aufgerufen.
REQUEST_NOTIFICATION_STATUS
CMyHttpModule::OnBeginRequest(
IHttpContext* pHttpContext,
IHttpEventProvider* pProvider
)
{
HRESULT hr;
static long cnt;
InterlockedIncrement(&cnt); // keep track of how many times we are called
cnt++;
IHttpRequest *pRequest = pHttpContext->GetRequest();
PCWSTR url = pRequest->GetRawHttpRequest()->CookedUrl.pAbsPath;
OutputDebugStringW(url);
// return unless requesting a HTML file
if (!wcsstr(url, L".htm"))
return RQ_NOTIFICATION_CONTINUE;
IHttpResponse * pHttpResponse = pHttpContext->GetResponse();
// Return most times so we can still view content
if ((cnt % 5) || pHttpResponse == NULL)
return RQ_NOTIFICATION_CONTINUE;
TRC_MSG_FULL("HTML cnt = " << cnt);
static int insertPosCnt;
int insertPos = ++insertPosCnt % 2 - 1; // toggle between 0 and -1
// Use ostringstream to create some dynamic content
std::ostringstream os;
os << "<p /> first chunk callback count = " << cnt
<< " insertPos = " << insertPos << "<br />";
//
// WECbyRefChunk does all the work of inserting data into the response
//
hr = WECbyRefChunk(os, pHttpContext, pProvider, insertPos);
if (FAILED(hr))
return RQ_NOTIFICATION_FINISH_REQUEST;
os << "<br /> <b> Adding 2nd chunk in Bold </b> File insertPos = " << insertPos;
hr = WECbyRefChunk(os, pHttpContext, pProvider, insertPos);
if (FAILED(hr))
return RQ_NOTIFICATION_FINISH_REQUEST;
os << " <p /> Last (3rd) Chunk added with default append chunk GetCurrentThreadId = "
<< GetCurrentThreadId();
// any errors will be logged/handled in WECbyRefChunk
WECbyRefChunk(os, pHttpContext, pProvider);
// End additional processing, not because of error, but so another request
// (from a GIF or .css style sheet on the same HTML page)
// doesn't wipe out our WriteEntityChunkByReference. We can also get the
// WriteEntityChunkByReference prepended to our normal HTML page.
return RQ_NOTIFICATION_FINISH_REQUEST;
}
class My_Events
{
public:
static LPCGUID GetAreaGuid( VOID ){ // GUID for the event class
static const GUID AreaGuid =
{0xacade3b2,0xb7d7,0x4339,{0x95,0x6c,0x81,0x1b,0x4e,0xdb,0x1b,0x24}};
return &AreaGuid;
};
static LPCGUID GetProviderGuid( VOID ){ // GUID for the event Provider
static const GUID PrvderGuid =
// {EB881638-214A-4f2a-9B39-933770822D18}
{ 0xeb881638, 0x214a, 0x4f2a, { 0x9b, 0x39, 0x93, 0x37, 0x70, 0x82, 0x2d, 0x18 } };
;
return &PrvderGuid;
};
class My_COMPLETION
{
public:
static HRESULT RaiseEvent(
IHttpTraceContext * pHttpTraceContext,
LONG InsertPosition
)
//
// Raise Cmy_COMPLETION Event
//
{
HTTP_TRACE_EVENT Event;
Event.pProviderGuid = My_Events::GetProviderGuid();
Event.dwArea = 1;
Event.pAreaGuid = My_Events::GetAreaGuid();
Event.dwEvent = 1;
Event.pszEventName = L"NOTIFY_MY_CSTM_WECBR_EVNT";
Event.dwEventVersion = 2;
Event.dwVerbosity = 1;
Event.cEventItems = 1;
Event.pActivityGuid = NULL;
Event.pRelatedActivityGuid = NULL;
Event.dwTimeStamp = 0;
Event.dwFlags = HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS;
// pActivityGuid, pRelatedActivityGuid, Timestamp to be filled in by IIS
HTTP_TRACE_EVENT_ITEM Items[ 1 ];
Items[ 0 ].pszName = L"InsertPosition";
Items[ 0 ].dwDataType = HTTP_TRACE_TYPE_LONG; // mof type (object)
#pragma warning (disable:4312)
Items[ 0 ].pbData = (PBYTE) InsertPosition;
Items[ 0 ].cbData = 4;
Items[ 0 ].pszDataDescription = L"Insert Position";
Event.pEventItems = Items;
return pHttpTraceContext->RaiseTraceEvent( &Event );
};
};
};
Wenn die Ablaufverfolgung für Anforderungsfehler ordnungsgemäß konfiguriert ist, werden die NOTIFY_MODULE_START
Ereignisse und NOTIFY_MODULE_END
im Ablaufverfolgungsprotokoll angezeigt. Weitere Informationen zum Protokollieren fehlerhafter Anforderungen finden Sie unter Konfigurieren der Ablaufverfolgung für fehlerhafte Anforderungen in IIS 7.0. Der folgende XML-Code ist der NOTIFY_MODULE_START
Teil des Ablaufverfolgungsprotokolls für fehlgeschlagene Anforderungen. Die meisten Daten sind systemabhängig und entsprechen nicht dem folgenden Ereignis.
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
<EventID>0</EventID>
<Version>1</Version>
<Level>5</Level>
<Opcode>1</Opcode>
<Keywords>0x100</Keywords>
<TimeCreated SystemTime="2007-08-27T21:10:30.186Z"/>
<Correlation ActivityID="{00000000-0000-0000-9800-0080000000FA}"/>
<Execution ProcessID="1308" ThreadID="3608"/>
<Computer>N2-IIS</Computer>
</System>
<EventData>
<Data Name="ContextId">{00000000-0000-0000-9800-0080000000FA}</Data>
<Data Name="ModuleName">A_raizeEvent</Data>
<Data Name="Notification">1</Data>
<Data Name="fIsPostNotification">false</Data>
<Data Name="fIsCompletion">false</Data>
</EventData>
<RenderingInfo Culture="en-US">
<Opcode>NOTIFY_MODULE_START</Opcode>
<Keywords>
<Keyword>RequestNotifications</Keyword>
</Keywords>
<freb:Description Data="Notification">BEGIN_REQUEST</freb:Description>
</RenderingInfo>
<ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
<EventGuid>{002E91E3-E7AE-44AB-8E07-99230FFA6ADE}</EventGuid>
</ExtendedTracingInfo>
</Event>
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 | Httptrace.h |