2010-05-11 17 views
5

Attualmente sto usando jquery ajax per chiamare un pagemethod (che funziona benissimo);Accesso al webmethod con jquery

$.ajax({ 
      type: "POST", 
      url: "ArticleList.aspx/GetArticleTags", 
      data: "{'articleId' : " + articleId + "}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
      if (msg.hasOwnProperty("d")) { msg = msg.d; } 
      var tags = JSON.parse(msg); 
      //do something 
      } 
     }); 

Il pagemethod;

<WebMethod()> 
    Public Shared Function GetArticleTags(ByVal articleId As Integer) As String 
    Using myDb As New MyRepository 
     Dim js As New JavaScriptSerializer 
     Dim returnString = js.Serialize((From t In myDb.GetArticleTags(articleId) Select t.TagId, t.Tag).ToList) 
     Return returnString 
    End Using 
    End Function 

Sono ora nella posizione, in cui ho bisogno di accedere alla mia funzione GetArticleTags da più pagine. Per aggiornarlo rapidamente è possibile

  1. Copia la funzione nella mia nuova pagina di aspx e chiamarla allo stesso modo.
  2. Continua a puntare alla pagina originale di aspx.

Entrambe sono piuttosto spazzatura.

Quindi l'unico modo ragionevole è chiamare un metodo wcf (webget). Ciò avrà il vantaggio di non dover serializzare manualmente gli oggetti su json. Sarà fatto per me.

Ho già un webservice restful nella soluzione, ma sono cauto nel chiamarlo dalla mia webapp. Preferirei tutto il codice in diretta all'interno della mia webapp, non dipendendo da un servizio web che si troverà in un pool di app diverso sullo stesso server di iis. Potrebbe essere necessario avviare a freddo ecc. E ho bisogno che questo sia veloce.

Ho aggiunto un file wcf alla mia webapp utilizzando il modello "Servizio WCF abilitato per AJAX". Ma così facendo, sto confondendo la mia webapp con endpoint nel web.config ecc. (E attualmente sto ricevendo 500 eccezioni System.ServiceModel.ServiceActivationException)

Quindi, fino alla mia domanda ... Qual è il modo migliore per chiamare la mia funzione? (Sto pensando che deve essere il mio servizio web riposante) C'è un'altra opzione che non sto considerando?

Grazie mille.

risposta

2

È consigliabile creare un servizio ASMX abilitato AJAX o utilizzare un normale gestore ASHX.

Se si esegue un gestore ASHX, è necessario gestire personalmente l'analisi e la sicurezza; Raccomando un servizio ASMX, che può essere estremamente simile al tuo metodo di pagina.

+0

In realtà ho creato creass come servizio asmx .... ma poi ho pensato nahhhh e prontamente cancellato (wcf vince sempre su asmx per me in questi giorni [ma per i servizi web corretti]). Ma probabilmente hai ragione, sarà la * migliore * soluzione nella mia situazione. – GordonB

Problemi correlati