2010-06-29 10 views
9

Tengo un código que me gustaría ejecutar muy temprano en el ciclo de vida de una llamada a una función ASMX. Para nuestras páginas ASPX, este código está en la función Page_Init() en una clase base, de la cual heredan todas nuestras páginas ASPX.ASMX equivalente de Page_Init?

¿Hay un ASMX equivalente a la función Page_Init() de la ASPX?

Mejor aún, ¿hay un diagrama de ciclo de vida ASMX como el ASPX uno? http://msdn.microsoft.com/en-us/library/ms178472.aspx

Si hay un ASMX equivalente a Page_Init(), supongo que puedo implementar el código en una clase base común, de la cual todas mis clases ASMX pueden heredar, ¿correcto?

EDIT: ¡Grandes respuestas - gracias por su ayuda!

Respuesta

8

No existe realmente tal cosa en un servicio web de asmx, System.Web.Services.WebService no tiene eventos. Su mejor opción es crear un constructor predeterminado y ponerlo allí.

p. Ej.

[WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    public class WebService1 : System.Web.Services.WebService 
    { 
     private string strRetVal; 

     public WebService1() 
     { 
      strRetVal = "Hello World"; 
     } 

     [WebMethod] 
     public string HelloWorld() 
     { 
      return strRetVal; 
     } 
    } 
+1

+1 - buen punto. Se olvidó de que las llamadas al servicio web son "sin estado", por lo que se llamará al constructor para cada solicitud de método web. Buena esa. – RPM1984

4

¡Muy buena pregunta!

No estoy del todo seguro, pero creo que la ejecución de los servicios web ASMX es ligeramente diferente a las páginas ASPX. No hay "ciclo de vida de página" (es decir, no hay inicialización de controles para representar HTML). XML).

Su única opción sería conectarse a uno de los eventos de la aplicación en Global.asax; el único evento adecuado sería Application_PreRequestHandlerExecute.

Puede probar Application_BeginRequest, pero creo que esto es solo para solicitudes de página ASP.NET, no llamadas de servicio web.

Usted es otra opción (como usted dijo) es crear una clase base para sus servicios web, luego llame al método base común en todos sus métodos web en la primera línea. Tendría que repetir esta llamada en TODOS sus métodos web. O si tiene todos sus métodos web en un único archivo de servicio web (ASMX), simplemente cree un método estático regular (no lo decore con el atributo WebMethod) y llámelo.

+0

Ruta Beter que la aceptada. (especialmente si necesita hacer algo con el contexto de solicitud.) –

0

no tienen ciclos de vida similares ''

El único 2 'eventos' son la solicitud y la respuesta.