Bagikan melalui


Struktur HTTP_TRACE_EVENT

Berisi informasi pelacakan yang dikembalikan dari penyedia pelacakan.

Sintaks

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

Anggota

Nama anggota Deskripsi
pProviderGuid Yang LPCGUID berisi pengidentifikasi penyedia. Nilai yang mungkin termasuk, tetapi tidak terbatas pada, nilai di bagian Pelacakan GUID yang ditentukan dalam Konstanta Pelacakan.
dwArea DWORD yang berisi area yang menarik untuk acara tersebut. Nilai area harus berupa bilangan bulat positif.
pAreaGuid LPCGUID yang menunjukkan area yang diminati.
dwEvent DWORD yang berisi pengidentifikasi unik peristiwa untuk penyedia peristiwa.
pszEventName LPCWSTR yang berisi nama peristiwa. Nilai ini ditetapkan oleh penyedia peristiwa untuk memberikan deskripsi jenis peristiwa.
dwEventVersion DWORD yang berisi versi peristiwa. Biasanya 0 atau 1, tetapi dapat berisi nilai bilangan bulat nonnegatif.
dwVerbosity DWORD yang memetakan nilai numerik ke rekan verbose mereka (nilai 0 hingga 5 dipetakan ke Umum, FatalError, Kesalahan, Peringatan, Info, dan Verbose).
pActivityGuid LPCGUID yang berisi pengidentifikasi permintaan unik.
pRelatedActivityGuid LPCGUID yang berisi nilai untuk mengaitkan aktivitas terkait. Sebagian besar penyedia mengatur nilai ini ke NULL lalu memungkinkan IIS mengisi nilai sebelum mengirim peristiwa ke pendengar peristiwa.
dwTimeStamp DWORD yang berisi stempel waktu opsional, yang diwakili oleh jumlah centang internal.
dwFlags DWORD yang berisi bendera tambahan. Sebagian besar penyedia mengatur nilai ini ke HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS, dijelaskan di bagian Konstanta Pelacakan yang ditentukan dalam Konstanta Pelacakan.
cEventItems DWORD yang berisi jumlah elemen dalam pEventItems array.
pEventItems Array struktur Struktur HTTP_TRACE_EVENT_ITEM panjang cEventItems.

Keterangan

Sebagian besar anggota HTTP_TRACE_EVENT peta struktur langsung ke peristiwa Pelacakan Peristiwa untuk Windows (ETW). Anggota dwArea dan pAreaGuid unik untuk IIS.

Kelas turunan CGlobalModule yang mendaftar untuk jenis peristiwa GL_TRACE_EVENT menerima pointer IGlobalTraceEventProvider sebagai parameter pada metode murni virtualCGlobalModule::OnGlobalTraceEvent. Anda kemudian dapat mengambil HTTP_TRACE_EVENT pointer dengan memanggil metode IGlobalTraceEventProvider::GetTraceEvent , tempat Anda menyediakan pointer ke alamat struktur NULL HTTP_TRACE_EVENT .

Untuk informasi selengkapnya, lihat Konstanta Pelacakan.

Anggota dwArea dan pAreaGuid berisi dua konstanta yang berbeda untuk area yang diminati untuk suatu acara.

Contoh

Contoh berikut mengisi HTTP_TRACE_EVENT struktur dan memanggil metode 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 );
        };

    };
};

Jika pelacakan permintaan gagal dikonfigurasi dengan benar, Anda akan melihat NOTIFY_MODULE_START peristiwa dan NOTIFY_MODULE_END di log jejak. Untuk informasi selengkapnya tentang pengelogan permintaan yang gagal, lihat Mengonfigurasi Pelacakan untuk Permintaan Yang Gagal di IIS 7.0. XML di bawah ini adalah NOTIFY_MODULE_START bagian dari log Pelacakan Permintaan Gagal. Sebagian besar data bergantung pada sistem dan tidak akan cocok dengan peristiwa di bawah ini.

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

Persyaratan

Jenis Deskripsi
Klien - IIS 7.0 di Windows Vista
- IIS 7.5 di Windows 7
- IIS 8.0 di Windows 8
- IIS 10.0 pada Windows 10
Server - IIS 7.0 di Windows Server 2008
- IIS 7.5 di Windows Server 2008 R2
- IIS 8.0 di Windows Server 2012
- IIS 8.5 di Windows Server 2012 R2
- IIS 10.0 di Windows Server 2016
Produk - 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

Lihat juga

Struktur Inti Server Web