2010-05-11 27 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