Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede generar una nueva instancia de controlador para cada solicitud HTTP si crea una clase que implemente la interfaz IHttpHandlerFactory. En el siguiente ejemplo se utiliza un generador de controladores HttpHandler para crear controladores diferentes para una solicitud HTTP GET y para una solicitud HTTP POST. Uno de los controladores es una instancia del controlador sincrónico del ejemplo anterior y el otro es una instancia del ejemplo de controlador asincrónico.
using System;
using System.Web;
namespace Handlers
{
class HandlerFactory : IHttpHandlerFactory
{
public IHttpHandler GetHandler(HttpContext context, string requestType, String url, String pathTranslated)
{
IHttpHandler handlerToReturn;
if("get" == context.Request.RequestType.ToLower())
{
handlerToReturn = new SynchHandler();
}
else if("post" == context.Request.RequestType.ToLower())
{
handlerToReturn = new AsynchHandler();
}
else
{
handlerToReturn = null;
}
return handlerToReturn;
}
public void ReleaseHandler(IHttpHandler handler)
{
}
public bool IsReusable
{
get
{
// To enable pooling, return true here.
// This keeps the handler in memory.
return false;
}
}
}
}
[Visual Basic]
Imports System
Imports System.Web
Namespace Handlers
Class HandlerFactory
Implements IHttpHandlerFactory
Public Function GetHandler(ByVal context As HttpContext, ByVal requestType As String, ByVal url As [String], ByVal pathTranslated As [String]) As IHttpHandler Implements IHttpHandlerFactory.GetHandler
Dim handlerToReturn As IHttpHandler
If "get" = context.Request.RequestType.ToLower() Then
handlerToReturn = New SynchHandler()
Else
If "post" = context.Request.RequestType.ToLower() Then
handlerToReturn = New AsynchHandler()
Else
handlerToReturn = Nothing
End If
End If
Return handlerToReturn
End Function
Public Sub ReleaseHandler(ByVal handler As IHttpHandler) Implements IHttpHandlerFactory.ReleaseHandler
End Sub
Public ReadOnly Property IsReusable() As Boolean
Get
' To enable pooling, return true here.
' This keeps the handler in memory.
Return False
End Get
End Property
End Class
End Namespace
Para registrar el generador de HttpHandler personalizado, cree una entrada en el archivo Web.config de la siguiente manera:
<configuration>
<system.web>
<httpHandlers>
<add verb="GET,POST" path="*.MyFactory"
type="Handlers.HandlerFactory, Handlers" />
</httpHandlers>
</system.web>
</configuration>