Comunicación de cliente a servidor ASP.NET
callback updatepanel (2)
¿Puede ayudarme a entender todas las formas diferentes de comunicarse desde el navegador al cliente en ASP.NET? He convertido esta wiki en una comunidad, así que no dudes en editar mi publicación para mejorarla. Específicamente, estoy tratando de entender en qué escenario usar cada uno enumerando cómo funciona cada uno.
Estoy un poco confuso en UpdatePanel vs CallBack (con ViewState): Sé que UpdatePanel siempre devuelve HTML mientras que CallBack puede devolver JSON. ¿Alguna otra diferencia importante?
... y CallBack (sin ViewState) vs WebMethod. CallBack atraviesa la mayor parte del ciclo de vida de la página, WebMethod no. ¿Alguna otra diferencia importante?
IHttpHandler
- Controlador personalizado para cualquier cosa (página, imagen, etc.)
- Solo hace lo que le dices que haga ( procesamiento liviano del servidor, tráfico liviano )
- Page es una implementación de IHttpHandler
- Si no necesita lo que proporciona Page , cree un IHttpHandler personalizado
- Si usa Page pero reemplaza a
Render()
y no genera HTML, probablemente pueda hacerlo con un IHttpHandler personalizado (por ejemplo, escribir datos binarios como imágenes)
- Por defecto puede usar las extensiones de archivo .axd o .ashx, ambas son funcionalmente similares
- .ashx no tiene puntos finales incorporados, por lo que es preferible por convención
Regular PostBack ( System.Web.UI.Page : IHttpHandler )
- Página Hereda
- No se requiere JavaScript
- La página web parpadea / se desplaza porque todo se recarga en el navegador
- Devuelve HTML de página completa ( tráfico pesado )
UpdatePanel ( System.Web.UI.Control )
- Control dentro de la página
- Full PostBack, incluidos los valores de control ViewState y HTML ( tráfico pesado )
- Ciclo de vida completo de la página ( procesamiento pesado del servidor )
- Controles fuera de UpdatePanel do Render (NullTextWriter)
- Debe usar ScriptManager
- Si no hay JavaScript del lado del cliente, puede recurrir a PostBack normal sin JavaScript (?)
- Sin parpadeo / desplazamiento ya que es una llamada asíncrona, a menos que vuelva a la devolución de datos normal.
- Se puede usar con páginas maestras y controles de usuario
- Tiene soporte incorporado para la barra de progreso
- Devuelve HTML para controles dentro de UpdatePanel ( tráfico medio )
Client CallBack ( Page , System.Web.UI.ICallbackEventHandler )
- Página Hereda
- Toma solo los datos que especifique ( tráfico ligero ) y opcionalmente ViewState (?) ( Tráfico medio )
- El cliente debe ser compatible con JavaScript y usar ScriptManager
- Sin parpadeo / desplazamiento ya que es una llamada asincrónica
- Se puede usar con páginas maestras y controles de usuario
- Devuelve solo los datos que especifique en el formato que especifique (por ejemplo, JSON, XML ...) (?) ( Tráfico ligero )
- Durante una devolución de llamada, la página debe agregar el control asociado en la misma ubicación en el árbol de control, de lo contrario, se produce una excepción.
WebMethod ( System.Web.Service.WebService )
- Considerado tecnología heredada. Debería usar el servicio WCF en su lugar .
- La clase implementa System.Web.Service.WebService
- HttpContext disponible a través de
this.Context
- HttpContext disponible a través de
- Toma solo los datos que especifique ( tráfico liviano )
- El servidor solo ejecuta el método llamado ( procesamiento de servidor ligero )
- El cliente debe ser compatible con JavaScript
- Sin parpadeo / desplazamiento ya que es una llamada asincrónica
- Se puede usar con páginas maestras y controles de usuario
- Devuelve solo los datos que especifique, generalmente JSON ( tráfico ligero )
- Puede crear una instancia de control de servidor para renderizar HTML y enviar de vuelta como una cadena, pero los eventos, la paginación en GridView, etc. no funcionará
PageMethods
- Esencialmente un WebMethod contenido en la clase Page , por lo que la mayoría de las viñetas de WebMethod se aplican
- Al igual que con WebMethod , se debe utilizar la tecnología heredada y el Servicio WCF.
- El método debe ser
public static
, por lo tanto, ninguna instancia de página accesible - HttpContext disponible a través de
HttpContext.Current
- Accedido directamente por URL
Page.aspx/MethodName
(por ejemplo, con XMLHttpRequest directamente o con una biblioteca como jQuery )- Establecer la propiedad
ScriptManager
EnablePageMethods="True"
genera un proxy JavaScript para cada WebMethod
- Establecer la propiedad
- No se puede usar directamente en los controles de usuario
- con páginas maestras y controles de usuario
Servicio WCF
- Sustituye a WebMethod y PageMethods
- La interfaz tiene el atributo ServiceContract
- El método tiene el atributo OperationContract
- Los mismos beneficios que WebMethod, más más flexible
¿Cualquier otro?
WebMethod
se usa con los servicios web ASMX, que ahora Microsoft considera como "tecnología heredada". Los servicios de WCF deben usarse en su lugar. Admiten servicios SOAP sobre HTTP / HTTPS y basados en REST o JSON, por lo que son mucho más flexibles.
Por esta razón, también recomiendo contra PageMethods
, incluso si parecen ser convenientes.
Para ICallbackEventHandler
- ViewState siempre se envía al servidor en la solicitud de ajax, por lo que se puede leer y se puede volver a crear una instancia del estado de control, pero ViewState no se actualiza en el servidor ni se envía de vuelta al navegador en la respuesta ajax.
- Los valores de formulario se envían al servidor en la solicitud.