Поделиться через


Структура HTTP_TRACE_EVENT

Содержит сведения трассировки, возвращаемые поставщиками трассировки.

Синтаксис

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

Члены

Имя участника Описание
pProviderGuid Объект , LPCGUID содержащий идентификатор поставщика. Возможные значения включают, помимо прочего, значения в разделе Идентификаторы GUID трассировки, определенные в разделе Трассировка констант.
dwArea Объект , DWORD содержащий интересующую область для события. Значение области должно быть положительным целым числом.
pAreaGuid Объект , LPCGUID указывающий интересующую область.
dwEvent Объект DWORD , содержащий уникальный идентификатор события для поставщика событий.
pszEventName Объект LPCWSTR , содержащий имя события. Это значение задается поставщиком событий для предоставления описания типа события.
dwEventVersion Объект DWORD , содержащий версию события. Обычно 0 или 1, но может содержать любое неотрицательное целочисленное значение.
dwVerbosity Объект , DWORD сопоставляющий числовые значения с их подробными аналогами (значения от 0 до 5 сопоставляют с общими, неустранимые ошибки, ошибками, предупреждениями, сведениями и подробными сведениями).
pActivityGuid Объект , LPCGUID содержащий уникальный идентификатор запроса.
pRelatedActivityGuid Объект LPCGUID , содержащий значение для связывания связанных действий. Большинство поставщиков устанавливают для этого значения значение NULL, а затем разрешают СЛУЖБАм IIS заполнять это значение перед отправкой события прослушивателям событий.
dwTimeStamp Объект , DWORD содержащий необязательную метку времени, представленную внутренним числом тактов.
dwFlags Объект , DWORD содержащий дополнительные флаги. Большинство поставщиков устанавливают для этого значения значение HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS, как описано в разделе Трассировка констант, определенных в разделе Трассировка констант.
cEventItems Объект DWORD , содержащий количество элементов в массиве pEventItems .
pEventItems Массив структур HTTP_TRACE_EVENT_ITEM структуры длины cEventItems.

Комментарии

Большинство элементов HTTP_TRACE_EVENT структуры сопоставляют непосредственно с событиями трассировки событий Windows (ETW). Элементы dwArea и pAreaGuid являются уникальными для IIS.

Производные классы CGlobalModule, которые регистрируются для GL_TRACE_EVENT типов событий, получают указатель IGlobalTraceEventProvider в качестве параметра в чистом методе CGlobalModule::OnGlobalTraceEventvirtual. Затем можно получить HTTP_TRACE_EVENT указатель, вызвав метод IGlobalTraceEventProvider::GetTraceEvent , для которого вы указываете указатель на адрес структуры NULL HTTP_TRACE_EVENT .

Дополнительные сведения см. в разделе Трассировка констант.

Элементы dwArea и pAreaGuid содержат две разные константы для интересующей области события.

Пример

В следующем примере показано заполнение HTTP_TRACE_EVENT структуры и вызов метода 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 );
        };

    };
};

Если трассировка неудачного запроса настроена правильно, в журнале трассировки будут отображаться NOTIFY_MODULE_START события и NOTIFY_MODULE_END . Дополнительные сведения о регистрации неудачных запросов см. в разделе Настройка трассировки неудачных запросов в IIS 7.0. Ниже приведен XML-код, который NOTIFY_MODULE_START является частью журнала трассировки неудачных запросов. Большая часть данных зависит от системы и не соответствует приведенному ниже событию.

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

Требования

Тип Описание
клиент — IIS 7.0 в Windows Vista
— IIS 7.5 в Windows 7
— IIS 8.0 в Windows 8
— IIS 10.0 в Windows 10
Сервер — IIS 7.0 в Windows Server 2008
— IIS 7.5 в Windows Server 2008 R2
— IIS 8.0 в Windows Server 2012
— IIS 8.5 в Windows Server 2012 R2
— IIS 10.0 в Windows Server 2016
Продукт — 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
Заголовок Httptrace.h

См. также:

Основные структуры веб-сервера