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는 일반, FatalError, 오류, 경고, 정보 및 자세한 정보로 매핑됨). |
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
멤버 대부분은 ETW(Windows용 이벤트 추적) 이벤트에 직접 매핑됩니다. 및 pAreaGuid
멤버는 dwArea
IIS에 고유합니다.
GL_TRACE_EVENT 이벤트 형식에 등록하는 CGlobalModule 파생 클래스는 CGlobalModule::OnGlobalTraceEvent pure virtual
메서드의 매개 변수로 IGlobalTraceEventProvider 포인터를 받습니다. 그런 다음, NULL HTTP_TRACE_EVENT
구조체의 주소에 대한 포인터를 제공하는 IGlobalTraceEventProvider::GetTraceEvent 메서드를 호출하여 포인터를 검색 HTTP_TRACE_EVENT
할 수 있습니다.
자세한 내용은 상수 추적을 참조하세요.
및 pAreaGuid
멤버는 dwArea
이벤트에 대한 관심 영역에 대해 서로 다른 두 개의 상수를 포함합니다.
예제
다음 예제에서는 구조를 채우고 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>
요구 사항
형식 | Description |
---|---|
클라이언트 | - Windows Vista의 IIS 7.0 - Windows 7의 IIS 7.5 - Windows 8의 IIS 8.0 - WINDOWS 10 IIS 10.0 |
서버 | - Windows Server 2008의 IIS 7.0 - Windows Server 2008 R2의 IIS 7.5 - Windows Server 2012의 IIS 8.0 - Windows Server 2012 R2의 IIS 8.5 - WINDOWS SERVER 2016 IIS 10.0 |
제품 | - 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 |