使用jquery访问webmethod

Gor*_*onB 5 vb.net ajax wcf webforms .net-4.0

我目前正在使用jquery ajax来调用pagemethod(效果很好);

$.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
          }
        });
Run Code Online (Sandbox Code Playgroud)

页面方法;

  <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
Run Code Online (Sandbox Code Playgroud)

我现在处于这个位置,我需要从多个页面访问我的GetArticleTags函数.为了快速启动并运行,我可以

  1. 将该函数复制到我的新aspx页面,并以相同的方式调用它.
  2. 继续指向原始的aspx页面.

两者都很垃圾.

所以剩下的唯一合理方法是调用wcf(webget)方法.这将具有意义的好处,我将不必手动将对象序列化为json.它会为我完成.

我已经在解决方案中有一个宁静的web服务,但我对从我的webapp调用它很谨慎.我宁愿将所有代码都存储在我的webapp中,而不是依赖于将在同一iis服务器上的不同应用程序池中的Web服务.它可能需要冷启动等,我需要快速.

我使用模板"支持AJAX的WCF服务"向我的webapp添加了一个wcf文件.但是通过这样做,我正在使用web.config等中的端点弄乱我的webapp(我现在得到500个System.ServiceModel.ServiceActivationException异常)

所以,直到我的问题....什么是调用我的功能的最佳方式?(我认为它必须是我宁静的网络服务)我还有其他选择吗?

非常感谢.

SLa*_*aks 2

您应该创建支持 AJAX 的 ASMX 服务或使用普通的 ASSX 处理程序。

如果您创建一个 ASHX 处理程序,您需要自己处理解析和安全性;我推荐 ASMX 服务,它与您的页面方法非常相似。