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 GlobalFileChange peristiwa, yang terjadi ketika file dalam situs Web diubah.
Sintaks
virtual GLOBAL_NOTIFICATION_STATUS OnGlobalFileChange(
IN IGlobalFileChangeProvider* pProvider
);
Parameter
pProvider
[IN] Penunjuk ke antarmuka IGlobalFileChangeProvider .
Tampilkan Nilai
Nilai GLOBAL_NOTIFICATION_STATUS .
Keterangan
Ketika modul global telah mendaftar untuk pemberitahuan peristiwa GL_FILE_CHANGE , IIS akan memanggil metode modul OnGlobalFileChange ketika file dalam lingkup situs Web diubah.
Catatan
Modul global dapat mendaftar untuk GlobalFileChange pemberitahuan peristiwa dengan mendaftar GL_FILE_CHANGE dalam fungsi RegisterModule modul.
IIS membuat antarmuka IGlobalFileChangeProvider dan meneruskan antarmuka ke metode modul OnGlobalFileChange . Pengembang dapat menggunakan antarmuka ini untuk mengambil informasi tentang file yang diubah.
Contoh
Contoh kode berikut menunjukkan cara membuat modul HTTP tingkat global yang menggunakan metode IGlobalFileChangeProvider::GetFileName untuk mengambil jalur ke file yang telah dimodifikasi. Modul kemudian menulis jalur file ke entri log di 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
OnGlobalFileChange(
IN IGlobalFileChangeProvider * pProvider
)
{
// Test for an error.
if (NULL != m_pHttpContext)
{
// Retrieve the file name.
PCWSTR pwszFileName = pProvider->GetFileName();
// Test for an error.
if (NULL != pwszFileName)
{
// Allocate storage for the file name.
char * pszFileName =
(char *) m_pHttpContext->AllocateRequestMemory(
(DWORD) wcslen(pwszFileName)+1 );
// Test for an error.
if (NULL != pszFileName)
{
// Convert the file name.
wcstombs(pszFileName,pwszFileName,
wcslen(pwszFileName));
// Create an array of strings.
LPCSTR szBuffer[2] = {"File Name"};
// Store the file name.
szBuffer[1] = pszFileName;
// 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
)
{
// 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_FILE_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 |