IScriptMapInfo::GetManagedType (Método)
Recupera el tipo administrado de un controlador de solicitudes.
Sintaxis
virtual PCWSTR GetManagedType(
DWORD* pcchManagedType = NULL
) const = 0;
Parámetros
pcchManagedType
Puntero a un DWORD
búfer que recibe la longitud, en caracteres, del tipo administrado.
Valor devuelto
Puntero a una cadena que contiene el tipo administrado.
Comentarios
El GetManagedType
método recupera el type
atributo de un controlador de solicitudes que se encuentra en la <handlers>
sección del archivo ApplicationHost.config. Este atributo contiene una lista de los espacios de nombres de .NET Framework para un controlador de solicitudes. Por ejemplo, el controlador de solicitudes "TraceHandler-Integrated" tiene un type
atributo de "System.Web.Handlers.TraceHandler" de forma predeterminada.
Ejemplo
En el ejemplo de código siguiente se muestra cómo usar el método IHttpContext::GetScriptMap para crear un módulo HTTP que recupere un puntero a una interfaz IScriptMapInfo . A continuación, en el ejemplo se usa el GetManagedType
método para recuperar el espacio de nombres administrado para el controlador de solicitudes que está procesando la solicitud actual. El módulo devuelve el tipo administrado a un cliente web y, a continuación, sale.
El IScriptMapInfo::GetManagedType
método difiere del método IHttpServer::GetManagedType en que el IScriptMapInfo::GetManagedType
método recuperará solo el type
atributo de la interfaz IScriptMapInfo , mientras IHttpServer::GetManagedType
que puede recuperar el type
atributo para cualquier ruta de acceso virtual.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create the module class.
class MyHttpModule : public CHttpModule
{
public:
REQUEST_NOTIFICATION_STATUS
OnPostMapRequestHandler(
IN IHttpContext * pHttpContext,
IN IHttpEventProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Retrieve the IScriptMapInfo interface.
IScriptMapInfo * pScriptMapInfo = pHttpContext->GetScriptMap();
// Create an HRESULT to receive return values from methods.
HRESULT hr;
// Test for an error.
if (NULL != pScriptMapInfo)
{
// Create buffers to store the managed type.
PCWSTR pwszManagedType;
PSTR pszManagedType;
DWORD cchManagedType = 0;
// Retrieve the managed type.
pwszManagedType = pScriptMapInfo->GetManagedType(&cchManagedType);
// Test for an error.
if (NULL != pwszManagedType)
{
// Clear the existing response.
pHttpContext->GetResponse()->Clear();
// Set the MIME type to plain text.
pHttpContext->GetResponse()->SetHeader(
HttpHeaderContentType,"text/plain",
(USHORT)strlen("text/plain"),TRUE);
// Test the length of the managed type.
if (cchManagedType > 0)
{
// Allocate space to store data.
pszManagedType =
(PSTR) pHttpContext->AllocateRequestMemory
(cchManagedType + 1);
// Test for an error.
if (NULL == pszManagedType)
{
// Set the error status.
hr = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
pProvider->SetErrorStatus( hr );
// End additional processing.
return RQ_NOTIFICATION_FINISH_REQUEST;
}
// Convert the WCHAR string to a CHAR string.
wcstombs(pszManagedType,
pwszManagedType,cchManagedType);
}
// Return the managed type to the client.
WriteResponseMessage(pHttpContext,"Managed type: ",
(cchManagedType>0) ? pszManagedType : "n/a");
// End additional processing.
return RQ_NOTIFICATION_FINISH_REQUEST;
}
}
// Return processing to the pipeline.
return RQ_NOTIFICATION_CONTINUE;
}
private:
// Create a utility method that inserts a name/value pair into the response.
HRESULT WriteResponseMessage(
IHttpContext * pHttpContext,
PCSTR pszName,
PCSTR pszValue
)
{
// Create an HRESULT to receive return values from methods.
HRESULT hr;
// Create a data chunk.
HTTP_DATA_CHUNK dataChunk;
// Set the chunk to a chunk in memory.
dataChunk.DataChunkType = HttpDataChunkFromMemory;
// Buffer for bytes written of data chunk.
DWORD cbSent;
// Set the chunk to the first buffer.
dataChunk.FromMemory.pBuffer =
(PVOID) pszName;
// Set the chunk size to the first buffer size.
dataChunk.FromMemory.BufferLength =
(USHORT) strlen(pszName);
// Insert the data chunk into the response.
hr = pHttpContext->GetResponse()->WriteEntityChunks(
&dataChunk,1,FALSE,TRUE,&cbSent);
// Test for an error.
if (FAILED(hr))
{
// Return the error status.
return hr;
}
// Set the chunk to the second buffer.
dataChunk.FromMemory.pBuffer =
(PVOID) pszValue;
// Set the chunk size to the second buffer size.
dataChunk.FromMemory.BufferLength =
(USHORT) strlen(pszValue);
// Insert the data chunk into the response.
hr = pHttpContext->GetResponse()->WriteEntityChunks(
&dataChunk,1,FALSE,TRUE,&cbSent);
// Test for an error.
if (FAILED(hr))
{
// Return the error status.
return hr;
}
// Return a success status.
return S_OK;
}
};
// Create the module's class factory.
class MyHttpModuleFactory : public IHttpModuleFactory
{
public:
HRESULT
GetHttpModule(
OUT CHttpModule ** ppModule,
IN IModuleAllocator * pAllocator
)
{
UNREFERENCED_PARAMETER( pAllocator );
// Create a new instance.
MyHttpModule * pModule = new MyHttpModule;
// Test for an error.
if (!pModule)
{
// Return an error if the factory cannot create the instance.
return HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
}
else
{
// Return a pointer to the module.
*ppModule = pModule;
pModule = NULL;
// Return a success status.
return S_OK;
}
}
void Terminate()
{
// Remove the class from memory.
delete this;
}
};
// Create the module's exported registration function.
HRESULT
__stdcall
RegisterModule(
DWORD dwServerVersion,
IHttpModuleRegistrationInfo * pModuleInfo,
IHttpServer * pGlobalInfo
)
{
UNREFERENCED_PARAMETER( dwServerVersion );
UNREFERENCED_PARAMETER( pGlobalInfo );
// Set the request notifications and exit.
return pModuleInfo->SetRequestNotifications(
new MyHttpModuleFactory,
0,
RQ_MAP_REQUEST_HANDLER
);
}
El módulo debe exportar la función RegisterModule . Puede exportar esta función mediante la creación de un archivo de definición de módulo (.def) para el proyecto, o bien puede compilar el módulo mediante el /EXPORT:RegisterModule
modificador . Para obtener más información, vea Tutorial: Creación de un módulo HTTP de Request-Level mediante código nativo.
Opcionalmente, puede compilar el código mediante la __stdcall (/Gz)
convención de llamada en lugar de declarar explícitamente la convención de llamada para cada función.
Requisitos
Tipo | Descripción |
---|---|
Remoto | - IIS 7.0 en Windows Vista - IIS 7.5 en Windows 7 - IIS 8.0 en Windows 8 - IIS 10.0 en Windows 10 |
Servidor | - IIS 7.0 en Windows Server 2008 - IIS 7.5 en Windows Server 2008 R2 - IIS 8.0 en Windows Server 2012 - IIS 8.5 en Windows Server 2012 R2 - IIS 10.0 en Windows Server 2016 |
Producto | - 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 |
Encabezado | Httpserv.h |
Consulte también
IScriptMapInfo (interfaz)
IHttpServer::GetManagedType (Método)