2010-01-08 14 views
5

Al utilizar ASP.Net Ajax para llamar a PageMethods, ¿cómo puedo acceder a los encabezados de respuesta Http desde el método de "éxito"?Access Response Headers desde ASP.Net PageMethod Call

Por ejemplo:

PageMethods.DoSomething(
    function(result){successMethod(result)}, 
    function(error){errorMethod(error)} 
); 

function successMethod(result){ 
    //------how can I access the Http response headers from here? ------ 
} 

Gracias por cualquier ayuda

Respuesta

2

En su ejemplo, PageMethods.DoSomething debe tener un valor de retorno igual a WebRequest si se trata de un proxy del servicio web asp.net. Esto se proporciona para que pueda manipular la solicitud después de haberla iniciado (es decir, cancelarla, etc.).

Con esta clase tiene un método add_completed que puede usar para agregar un controlador cuando la solicitud web finalice. La firma para la devolución de llamada es function OnWebRequestCompleted(executor, eventArgs), y el parámetro executor en esto le permite obtener información de respuesta adicional. Por ejemplo, puede obtener los encabezados de respuesta con executor.getAllResponseHeaders(); que debería ser un mapa (colección nombrada) de nombres y valores de encabezado.

Si agrega un controlador al evento completado de la solicitud web inmediatamente después de realizar la llamada al método de servicio, debería funcionar (¡no hay servicio web en el mundo que pueda responder más rápido que dos líneas consecutivas de código!).

El hipervínculo anterior a WebRequest contiene un ejemplo completo de cómo se conecta esto. Sin embargo, tenga en cuenta que este código usa WebRequest directamente.

Asp.Net Las clases proxy de Ajax Web Service usan la clase WebServiceProxy, y cada método proxy llama finalmente a su método invoke, que devuelve la instancia WebRequest.

+0

Gracias Lord Zoltan. ¡Esa es una información muy útil! – James

+0

contento de ser útil;) –

0

Una solicitud web tiene una colección de cabeceras

http://msdn.microsoft.com/en-us/library/bb383774.aspx

El webrequestmanager es un objeto estático que puede ser capaz de extraiga esta información de:

http://msdn.microsoft.com/en-us/library/bb397435.aspx

Afortunadamente, entre los dos enlaces, tiene sentido: -;

No estoy diciendo que recodificar utilizar este necesariamente, pero los métodos de página es un contenedor y, como tal, creo que sería acceder a la información de una solicitud web, que puede verse afectada por la WebRequestManager ...

+0

Gracias Brian. El único problema con esto es que no se me puede garantizar que la solicitud que recibo es la misma que está asociada con ese método de éxito. Hay muchas solicitudes asyn funcionando al mismo tiempo, podría terminar con una solicitud diferente, o la solicitud misma puede haber terminado cuando se llame al método de éxito. Realmente quiero una forma de acceder a los encabezados de respuesta para esa llamada en particular. Tengo la opción de hacer esto si recodio para utilizar la biblioteca de jQuery para hacer la llamada, pero realmente me gustaría utilizar la biblioteca .net para la coherencia. – James