Freigeben über


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 virtualCGlobalModule::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

Weitere Informationen

Webserverkernstrukturen