none
WebMethod porque son siempre compartidos RRS feed

  • Pregunta

  • Buenas,  tengo una consulta que me han realizado, y me dijo pensando y me puse ha investigar pero no he econtrato el algo muy concreto y queria saber si alguien tiene algo mas concreto.

    La pregunta es porque un WebMethod siempre tiene que ser compartido para llamadas ajax, si hay otras herramientas de tercero que no es necesario hacer eso y de igual se hace una llamada ajax.


    Desarrollo de Sistemas

    viernes, 5 de julio de 2019 14:22

Respuestas

  • los [WebMethod] que pones dentro de un .aspx siempre tienen que ser compartidos porque la única alternativa posible es que sean métodos de instancia. Pero si fuesen métodos de instancia, entonces nunca podrían ser llamados desde AJAX, porque en el momento en que se ejecuta la llamada AJAX no existe ninguna instancia.

    Si piensas en el ciclo de vida de la página aspx, es lógico que así sea: Cada vez que llega una llamada desde el navegador, el servidor crea una instancia de la clase, la ejecuta, envía el resultado al nevegador, y destruye la instancia. Por lo tanto, la instancia solo tiene unos milisegundos de tiempo de vida. Cuando el navegador muestra la página, en ese momento ya no existe la instancia en el servidor. Por lo tanto, si en ese momento se produjese una llamada desde la página al servidor usando AJAX, no se puede ejecutar nada sobre la instancia de la clase que sirvió la página porque la instancia ya no existe. De ahí la necesidad de que el método sea estático, para garantizar que no intenta acceder a ninguna variable de esa instancia que ya no existe.

    viernes, 5 de julio de 2019 15:14

Todas las respuestas

  • hola

    No entiendo la pregunta, a que llamas "compartido" en un webmethod ?

    no es necesario hacer que ?

    >>de igual se hace una llamada ajax.

    como implementas esa llamada ? usas alguna libreria como ser jquery con el $.ajax

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 5 de julio de 2019 14:38
  • los [WebMethod] que pones dentro de un .aspx siempre tienen que ser compartidos porque la única alternativa posible es que sean métodos de instancia. Pero si fuesen métodos de instancia, entonces nunca podrían ser llamados desde AJAX, porque en el momento en que se ejecuta la llamada AJAX no existe ninguna instancia.

    Si piensas en el ciclo de vida de la página aspx, es lógico que así sea: Cada vez que llega una llamada desde el navegador, el servidor crea una instancia de la clase, la ejecuta, envía el resultado al nevegador, y destruye la instancia. Por lo tanto, la instancia solo tiene unos milisegundos de tiempo de vida. Cuando el navegador muestra la página, en ese momento ya no existe la instancia en el servidor. Por lo tanto, si en ese momento se produjese una llamada desde la página al servidor usando AJAX, no se puede ejecutar nada sobre la instancia de la clase que sirvió la página porque la instancia ya no existe. De ahí la necesidad de que el método sea estático, para garantizar que no intenta acceder a ninguna variable de esa instancia que ya no existe.

    viernes, 5 de julio de 2019 15:14
  • Ok, excelente, el detalle que me llamo a atención eso, ya que utilizando otra forma por parte de un dll de x proveedor no es necesario ponerlo estático, pero me imagino que internamente debe de hacer algo parecido.

    Desarrollo de Sistemas

    viernes, 5 de julio de 2019 15:43
  • En realidad no se necesita una DLL de terceros. Si quieres usar métodos de instancia, puedes añadir un webservice al proyecto y entonces son métodos de instancia. O puedes llamar a un .ashx o incluso un .aspx. Todos se pueden llamar mediante ajax siempre que filtres y proceses adecuadamente el contenido devuelto.
    viernes, 5 de julio de 2019 17:47