¿Cuál es la forma más eficaz de llamar a algunos de lógica de negocios de javascript en el lado del cliente usando AJAX? Parece que usted puede llamar a un [WebMethod] en una aspx directamente desde javascript (en mi caso estoy usando JQuery para ayudar) O puede llamar a una .asmx directamente. Que llame a los que se incurre en menos gastos generales? ¿Cuál es la mejor práctica?

También, lo que hace el [ScriptService] atributo en una clase? Nunca he utilizado esto en mi .aspx [WebMethod] métodos y todo parece estar funcionando bien.

Estoy esperando que esto es puramente objetivo de la pregunta. Gracias de antemano!

InformationsquelleAutor jakejgordon | 2009-03-23

3 Comentarios

  1. 30

    La ScriptService cosas que en mi opinión es una joya escondida en asp.net. Llama a la secuencia de comandos de servicio no passback formulario de datos + viewstate, que son delgados, rápido JSON cargas.

    Heres la mejor parte, ASP.NET3.5 scriptmanager puede hacer el trabajo por usted en relación con la generación de un JS método para que usted llame y también la configuración de cualquier JS clases necesarias.

    Un ejemplo simple para obtener los detalles de una «Persona», suponiendo que la Persona es una clase de C#.

    En PersonService.asmx:

    namespace MyProj.Services {
      [System.Web.Script.Services.ScriptService]
      [System.Web.Script.Services.GenerateScriptType(typeof(Person))] 
      public class PersonService : System.Web.Services.WebService
      {
        [WebMethod, ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
        public Person GetPersonDetails(int id)
        { 
           /* return Logic here */
        }
      }
    }

    En DetailsPage.aspx

    <asp:ScriptManager ID="ScriptManager1" runat="server">
     <Services>
      <asp:ServiceReference Path="~/Services/PersonService.asmx" />
     </Services>
    </asp:ScriptManager>

    Mediante el uso de una configuración como esta, no va a necesitar la ayuda de JQuery para llamar al servicio y obtener un JS versión de su C# la clase de Persona, .net hace todo por usted.
    Un ejemplo del uso de este servicio de JS sería:

    MyProj.Services.PersonService.GetPersonDetails(id, _onDetailsCallbackSuccess, _requestFailed, null);
    
    _onDetailsCallbackSuccess: function(result, userContext, methodName) {
     //all persons properties are now intact and available
     document.getElementById('txtFirstname').value = result.Firtname;
    }

    De todos modos, sería más digno de mirar en el ASP.NET Ajax ScriptService cosas. Incluso si usted decide no utilizar este tiempo es bastante malo característica.

    Enlaces

    • Gracias, tu respuesta fue muy útil . He marcado la otra como la respuesta desde que respondió primero, pero he votado a favor de su respuesta, ya que será útil en adelante
    • Usted debe marcar la más útil de respuesta como la respuesta. Estamos premiando a grandes respuestas aquí, no es rápido mecanógrafos.
    • El primer enlace (www.jankoatwarpspeed.com) devuelve Página no encontrada 🙁 puede haber sido eliminado en el medio…
  2. 16

    Si en el lado del servidor de sobrecarga es todo lo que importa, entonces el envío de un simple OBTENER con una cadena de consulta a una ASHX, probablemente sería. Es definitivamente preferible a una .ASPX, que se va a ir a través de una página de ciclo de vida para que usted no necesita.

    La ventaja de una web ASMX método es que se basa en un estándar que pueden ser llamados por otras tecnologías fácilmente (compatible con el descubrimiento). Con algo de documentación, su .ASHX será tan fácil llamar, aunque.

    • Puede usted llamar a un específico [WebMethod] en una .ASHX hacer un GET?
    • Eso no es lo que es. Una .ASHX va a tener que romper la cadena de consulta y de la rama para el método en sí. Es más trabajo de programación de un ASMX, pero muy poca sobrecarga mientras se ejecuta — bastante más pequeño que usted puede obtener mientras que aún usando ASP.NET.
    • Así que un ashx es realmente un HTTPRequestHandler que no pasa a través de un ciclo de vida de página? Que va a ser muy útil para otras cosas, pero probablemente voy a evitar que, en este caso en particular como yo puede tener 10+ [WebMethods] que realmente implican el uso de un gigante de la instrucción switch…
    • Usted podría tener 10+ ashx páginas en lugar de un gigante de la instrucción switch
  3. 13

    De la manera que usted formulada tu pregunta, yo creo que usted está considerando la diferencia entre un ASMX «ScriptService», un ASHX HttpHandler, y un ASP.NET AJAX «PageMethod» (no se trata de una Página ASPX).

    Si este es el caso, todos ellos son muy similares. El ASP.NET AJAX PageMethods son, para todos los intentos y propósitos, idéntica a la ASMX ScriptServices. Que no crear una instancia de la Página, por lo que no incurren en los gastos generales que normalmente se asocian con las páginas ASPX.

    Menos que usted está hablando acerca de saturar el servidor con peticiones, usted probablemente encontrará que todos los tres de realizar comparable.

Dejar respuesta

Please enter your comment!
Please enter your name here