Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mewakili metode yang akan menangani GlobalConfigurationChange peristiwa, yang terjadi ketika perubahan dilakukan pada file konfigurasi.
Sintaks
virtual GLOBAL_NOTIFICATION_STATUS OnGlobalConfigurationChange(
IN IGlobalConfigurationChangeProvider* pProvider
);
Parameter
pProvider
[IN] Penunjuk ke antarmuka IGlobalConfigurationChangeProvider .
Tampilkan Nilai
Nilai GLOBAL_NOTIFICATION_STATUS .
Keterangan
Ketika modul global telah mendaftar untuk pemberitahuan peristiwa GL_CONFIGURATION_CHANGE , IIS akan memanggil metode modul OnGlobalConfigurationChange jika file konfigurasi diubah. Misalnya, jika file ApplicationHost.config diubah, peristiwa yang berisi jalur konfigurasi akan ditulis ke Penampil Peristiwa.
Catatan
Modul global dapat mendaftar untuk GlobalConfigurationChange pemberitahuan peristiwa dengan mendaftar GL_CONFIGURATION_CHANGE dalam fungsi RegisterModule modul.
Contoh
Contoh kode berikut menunjukkan cara membuat modul HTTP tingkat global yang menggunakan metode IGlobalConfigurationChangeProvider::GetChangePath untuk mengambil jalur perubahan konfigurasi dan menambahkan entri log ke Pemampil Peristiwa.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create the module's global class.
class MyGlobalModule : public CGlobalModule
{
public:
GLOBAL_NOTIFICATION_STATUS
OnGlobalConfigurationChange(
IN IGlobalConfigurationChangeProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Test for an error.
if (NULL != m_pHttpContext)
{
// Retrieve the path that has changed.
PCWSTR pwszChangePath = NULL;
pwszChangePath = pProvider->GetChangePath();
// Test for an error.
if (NULL != pwszChangePath)
{
// Allocate storage for the path.
char * pszChangePath =
(char *) m_pHttpContext->AllocateRequestMemory(
(DWORD) wcslen(pwszChangePath)+1 );
// Test for an error.
if (NULL != pszChangePath)
{
// Convert the path.
wcstombs(pszChangePath,pwszChangePath,
wcslen(pwszChangePath));
// Create an array of strings.
LPCSTR szBuffer[2] = {"Path Changed"};
// Store the path.
szBuffer[1] = pszChangePath;
// Write the strings to the Event Viewer.
WriteEventViewerLog(szBuffer,2);
}
}
}
// Return processing to the pipeline.
return GL_NOTIFICATION_CONTINUE;
}
GLOBAL_NOTIFICATION_STATUS
OnGlobalPreBeginRequest(
IN IPreBeginRequestProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Retrieve a pointer to the context.
m_pHttpContext = pProvider->GetHttpContext();
// Return processing to the pipeline.
return GL_NOTIFICATION_CONTINUE;
}
VOID Terminate()
{
// Remove the class from memory.
delete this;
}
MyGlobalModule()
{
// Open a handle to the Event Viewer.
MyGlobalModule::m_hEventLog = RegisterEventSource( NULL,"IISADMIN" );
// Initialize the context pointer to NULL.
MyGlobalModule::m_pHttpContext = NULL;
}
~MyGlobalModule()
{
// Test whether the handle for the Event Viewer is open.
if (NULL != MyGlobalModule::m_hEventLog)
{
DeregisterEventSource( MyGlobalModule::m_hEventLog );
MyGlobalModule::m_hEventLog = NULL;
MyGlobalModule::m_pHttpContext = NULL;
}
}
private:
// Create a handle for the event viewer.
HANDLE m_hEventLog;
// Create a pointer for the module context.
IHttpContext * m_pHttpContext;
// Define a method that writes to the Event Viewer.
BOOL WriteEventViewerLog(LPCSTR szBuffer[], WORD wNumStrings)
{
// Test whether the handle for the Event Viewer is open.
if (NULL != MyGlobalModule::m_hEventLog)
{
// Write any strings to the Event Viewer and return.
return ReportEvent(
MyGlobalModule::m_hEventLog,
EVENTLOG_INFORMATION_TYPE,
0, 0, NULL, wNumStrings,
0, szBuffer, NULL );
}
return FALSE;
}
};
// Create the module's exported registration function.
HRESULT
__stdcall
RegisterModule(
DWORD dwServerVersion,
IHttpModuleRegistrationInfo * pModuleInfo,
IHttpServer * pGlobalInfo
)
{
UNREFERENCED_PARAMETER( dwServerVersion );
UNREFERENCED_PARAMETER( pGlobalInfo );
// Create an instance of the global module class.
MyGlobalModule * pGlobalModule = new MyGlobalModule;
// Test for an error.
if (NULL == pGlobalModule)
{
return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
}
// Set the global notifications and exit.
return pModuleInfo->SetGlobalNotifications(
pGlobalModule,
GL_CONFIGURATION_CHANGE | GL_PRE_BEGIN_REQUEST );
}
Modul Anda harus mengekspor fungsi RegisterModule . Anda dapat mengekspor fungsi ini dengan membuat file definisi modul (.def) untuk proyek Anda, atau Anda dapat mengkompilasi modul dengan menggunakan sakelar /EXPORT:RegisterModule . Untuk informasi selengkapnya, lihat Panduan: Membuat Modul HTTP Global-Level Dengan Menggunakan Kode Asli.
Anda dapat secara opsional mengkompilasi kode dengan menggunakan __stdcall (/Gz) konvensi panggilan alih-alih secara eksplisit mendeklarasikan konvensi panggilan untuk setiap fungsi.
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 | Httpserv.h |
Lihat juga
Kelas CGlobalModule
Antarmuka IGlobalConfigurationChangeProvider