2010-05-11 25 views
5

我目前使用jquery ajax來調用pagemethod(這很好用);與jquery訪問webmethod

$.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 
      } 
     }); 

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 

我現在處於這樣的位置,我需要從多個頁面訪問我的GetArticleTags函數。要快速啓動並運行我可以

  1. 將函數複製到我的新的aspx頁面,並以相同的方式調用它。
  2. 繼續指向原始的aspx頁面。

這兩個都很漂亮垃圾。

所以剩下的唯一合理的方法是調用wcf(webget)方法。 這將有意義的好處,我將不必手動序列化對象到JSON。這將爲我完成。

我已經在解決方案中有一個安靜的web服務,但我很擔心從我的webapp調用它。我寧願所有代碼都在我的web應用程序中,而不是依賴於將位於同一個iis服務器上的不同應用程序池中的Web服務。它可能需要冷啓動等,我需要這很快。

我已經使用模板「啓用AJAX的WCF服務」向我的webapp添加了一個wcf文件。但是,然後通過這樣做,我糊塗了web.config中的端點web服務器等(我目前正在得到500 System.ServiceModel.ServiceActivationException異常的)

所以,回到我的問題... 。 什麼是調用我的函數的最佳方式? (我認爲它必須是我寧靜的webservice) 有沒有另一種選擇,我不考慮?

非常感謝。

回答

2

您應該創建一個支持AJAX的ASMX服務或使用普通的ASHX處理程序。

如果您製作ASHX處理程序,則需要自己處理解析和安全性;我推薦一個ASMX服務,它可以和你的頁面方法非常相似。

+0

我實際上確實認爲asmx服務....但後來想到nahhhh,並立即刪除它(wcf這些天總是勝過我的asmx [但對於正確的web服務])。但是你可能是對的,這將是我最好的解決方案。 – GordonB 2010-05-11 12:26:39