Partager via


HTTP_TRACE_EVENT Structure

Contient les informations de suivi retournées par les fournisseurs de trace.

Syntaxe

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;  
};  

Membres

Nom du membre Description
pProviderGuid LPCGUID qui contient l’identificateur du fournisseur. Les valeurs possibles incluent, sans s’y limiter, les valeurs de la section Suivi DES GUID définis dans Constantes de suivi.
dwArea DWORD qui contient la zone d’intérêt pour l’événement. La valeur de zone doit être un entier positif.
pAreaGuid LPCGUID qui indique la zone d’intérêt.
dwEvent qui contient l’identificateur unique de l’événement pour le fournisseur d’événements DWORD .
pszEventName LPCWSTR qui contient le nom de l’événement. Cette valeur est définie par le fournisseur d’événements pour fournir une description du type d’événement.
dwEventVersion qui contient la version de DWORD l’événement. Généralement 0 ou 1, mais peut contenir n’importe quelle valeur entière non négative.
dwVerbosity DWORD qui mappe les valeurs numériques à leurs équivalents détaillés (les valeurs 0 à 5 correspondent à Général, FatalError, Error, Warning, Info et Verbose).
pActivityGuid LPCGUID qui contient l’identificateur de requête unique.
pRelatedActivityGuid LPCGUID qui contient une valeur pour associer des activités associées. La plupart des fournisseurs définissent cette valeur sur NULL, puis autorisent IIS à remplir la valeur avant d’envoyer l’événement aux écouteurs d’événements.
dwTimeStamp DWORD qui contient l’horodatage facultatif, représenté par un nombre de graduations interne.
dwFlags DWORD qui contient des indicateurs supplémentaires. La plupart des fournisseurs définissent cette valeur sur HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS, décrit dans la section Suivi des constantes définies dans Suivi des constantes.
cEventItems DWORD qui contient le nombre d’éléments dans le pEventItems tableau.
pEventItems Tableau de structures de HTTP_TRACE_EVENT_ITEM structure de longueur cEventItems.

Remarques

La plupart des membres de la structure mappent HTTP_TRACE_EVENT directement aux événements de suivi d’événements pour Windows (ETW). Les dwArea membres et pAreaGuid sont propres à IIS.

Les classes dérivées de CGlobalModule qui s’inscrivent à GL_TRACE_EVENT types d’événements reçoivent un pointeur IGlobalTraceEventProvider en tant que paramètre sur la méthode pure virtualCGlobalModule::OnGlobalTraceEvent. Vous pouvez ensuite récupérer un HTTP_TRACE_EVENT pointeur en appelant la méthode IGlobalTraceEventProvider::GetTraceEvent , pour laquelle vous fournissez un pointeur vers l’adresse d’une structure NULL HTTP_TRACE_EVENT .

Pour plus d’informations, consultez Traçage des constantes.

Les dwArea membres et pAreaGuid contiennent deux constantes différentes pour la zone d’intérêt d’un événement.

Exemple

L’exemple suivant remplit la HTTP_TRACE_EVENT structure et appelle la méthode IHttpTraceContext::RaiseTraceEvent .

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 );
        };

    };
};

Si le suivi des demandes ayant échoué est correctement configuré, vous verrez les NOTIFY_MODULE_START événements et NOTIFY_MODULE_END dans le journal de suivi. Pour plus d’informations sur la journalisation des demandes ayant échoué, consultez Configuration du suivi pour les demandes ayant échoué dans IIS 7.0. Le code XML ci-dessous est la NOTIFY_MODULE_START partie du journal de suivi des demandes ayant échoué. La plupart des données dépendent du système et ne correspondent pas à l’événement ci-dessous.

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

Spécifications

Type Description
Client - IIS 7.0 sur Windows Vista
- IIS 7.5 sur Windows 7
- IIS 8.0 sur Windows 8
- IIS 10.0 sur Windows 10
Serveur - IIS 7.0 sur Windows Server 2008
- IIS 7.5 sur Windows Server 2008 R2
- IIS 8.0 sur Windows Server 2012
- IIS 8.5 sur Windows Server 2012 R2
- IIS 10.0 sur Windows Server 2016
Produit - 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
En-tête Httptrace.h

Voir aussi

Structures principales du serveur web