C# ASP.NET:用于简单ajax调用的Web服务还是WCF?

C# ASP.NET:用于简单ajax调用的Web服务还是WCF?,c#,asp.net,wcf,web-services,C#,Asp.net,Wcf,Web Services,我只想通过ajax在我的web服务上调用一个方法,并让它返回一个值 我应该使用WCF服务、支持AJAX的WCF服务还是Web服务 哪个最简单?您应该使用支持Ajax的WCF服务。我不记得确切的名称,但它应该标记一个属性,以便从JS访问 您应该使用支持Ajax的WCF服务。我不记得确切的名称,但它应该标记一个属性,以便从JS访问 除非您正在维护现有代码并且无法更改,否则不应使用Web服务模板 除非您正在维护现有代码并且无法更改,否则不应使用Web服务模板 改用通用HTTP处理程序。它们更易于编码。

我只想通过ajax在我的web服务上调用一个方法,并让它返回一个值

我应该使用WCF服务、支持AJAX的WCF服务还是Web服务


哪个最简单?

您应该使用支持Ajax的WCF服务。我不记得确切的名称,但它应该标记一个属性,以便从JS访问

您应该使用支持Ajax的WCF服务。我不记得确切的名称,但它应该标记一个属性,以便从JS访问

除非您正在维护现有代码并且无法更改,否则不应使用Web服务模板

除非您正在维护现有代码并且无法更改,否则不应使用Web服务模板

改用通用HTTP处理程序。它们更易于编码。

使用通用HTTP处理程序。它们更易于编码。

如果只调用单个方法,请使用ScriptMethod

您可以将其与使用它的页面内联编码。

使用ScriptMethod属性

ScriptService属性是 只有ASP.NET AJAX属性具有 要在中的.NET Web服务中定义 ASP.NET使用它的顺序 AJAX页面。然而,另一个属性 还可以应用命名的ScriptMethod 直接指向服务中的Web方法。 ScriptMethod定义了三个属性 包括UseHttpGet、ResponseFormat 和XmlSerializeString。改变 这些属性的值可以是 适用于以下情况: Web方法接受的请求需要 当Web 方法需要在中返回原始XML数据 XML文档或文档的形式 XmlElement对象或当数据 应始终从服务返回 可以序列化为XML而不是JSON

可以使用UseHttpGet属性 Web方法何时应接受GET 与POST请求相反的请求。 使用带有Web的URL发送请求 方法输入参数转换为 查询字符串参数。UseHttpGet 属性默认为false,并且应该 仅在执行操作时才将设置为true 被认为是安全的 敏感数据不会传递到网站 服务清单6显示了一个示例 将ScriptMethod属性用于 UseHttpGet属性


如果只是调用单个方法,请使用ScriptMethod

您可以将其与使用它的页面内联编码。

使用ScriptMethod属性

ScriptService属性是 只有ASP.NET AJAX属性具有 要在中的.NET Web服务中定义 ASP.NET使用它的顺序 AJAX页面。然而,另一个属性 还可以应用命名的ScriptMethod 直接指向服务中的Web方法。 ScriptMethod定义了三个属性 包括UseHttpGet、ResponseFormat 和XmlSerializeString。改变 这些属性的值可以是 适用于以下情况: Web方法接受的请求需要 当Web 方法需要在中返回原始XML数据 XML文档或文档的形式 XmlElement对象或当数据 应始终从服务返回 可以序列化为XML而不是JSON

可以使用UseHttpGet属性 Web方法何时应接受GET 与POST请求相反的请求。 使用带有Web的URL发送请求 方法输入参数转换为 查询字符串参数。UseHttpGet 属性默认为false,并且应该 仅在执行操作时才将设置为true 被认为是安全的 敏感数据不会传递到网站 服务清单6显示了一个示例 将ScriptMethod属性用于 UseHttpGet属性


如果这些是您唯一的选择,我发现支持AJAX的WCF服务是最简单的。它仍然是WCF,但它为您提供了正确的web.config设置模板,并抛弃了普通WCF服务模板提供的界面。它似乎是整个WCF混乱中最接近旧ASMX风格的东西,因为它非常简单

作为另一种选择,如果您碰巧能够在webforms项目中使用ASP.NET MVC,并且只需要将其用于ajax调用,您可以完全跳过web服务的喧嚣,为ajax调用创建一个简单的JSON结果,如下所示:

// put this method in a controller
public JsonResult AjaxJsonTest(string who) {
   var result = new {
      Success = true,
      Message="Hello, " + (who ?? "world!")
   }; 
   return Json(result, JsonRequestBehavior.AllowGet);
}
然后您可以从jQuery调用它,如下所示:

<script language="javascript" type="text/javascript">
function AjaxTestClick() {
    $.ajax({
        type: "POST",
        url: '<%: Url.Action("AjaxJsonTest", "Test") %>',
        data: { who: 'whomever' },
        success: function (resultData) {
            if (resultData.Success) {
                alert(resultData.Message);
            }
            else {
                alert('Ajax call failed.');
            }
        }
    });
}
</script>

大量选项—选择最适合您情况的选项。

如果这些是您唯一的选项,我发现支持AJAX的WCF服务是最简单的。它仍然是WCF,但它为您提供了正确的web.config设置模板,并抛弃了普通WCF服务模板提供的界面。它似乎是整个WCF混乱中最接近旧ASMX风格的东西,因为它非常简单

作为另一种选择,如果您碰巧能够在webforms项目中使用ASP.NETMVC,并且只需要在ajax调用中使用它 ,您可以完全跳过web服务的喧嚣,为AJAX调用创建一个简单的JSON结果,如下所示:

// put this method in a controller
public JsonResult AjaxJsonTest(string who) {
   var result = new {
      Success = true,
      Message="Hello, " + (who ?? "world!")
   }; 
   return Json(result, JsonRequestBehavior.AllowGet);
}
然后您可以从jQuery调用它,如下所示:

<script language="javascript" type="text/javascript">
function AjaxTestClick() {
    $.ajax({
        type: "POST",
        url: '<%: Url.Action("AjaxJsonTest", "Test") %>',
        data: { who: 'whomever' },
        success: function (resultData) {
            if (resultData.Success) {
                alert(resultData.Message);
            }
            else {
                alert('Ajax call failed.');
            }
        }
    });
}
</script>

有很多选择-选择最适合你的情况。

认真点?请证实这一令人惊讶的说法。为什么要使用有效地构建在处理程序之上的web服务或wcf服务?@Phill:当它构建在机器代码之上时,为什么要使用高级语言?John,要从数据库中检索简单值,您不需要编写整个服务/库。在JQuery中,您可以按照$.postrl、data、delegate这样的行进行操作,其中数据是一个json对象,包含要发送给处理程序的参数。当服务器返回数据或错误时,将执行委托。尽管如此@Phil是对的,没有特别需要支持Ajax的WCF服务。。。它沉重、臃肿、浪费资源。此外,如果您的数据访问层吐出对象,您总是可以将它们作为json返回…真的吗?请证实这一令人惊讶的说法。为什么要使用有效地构建在处理程序之上的web服务或wcf服务?@Phill:当它构建在机器代码之上时,为什么要使用高级语言?John,要从数据库中检索简单值,您不需要编写整个服务/库。在JQuery中,您可以按照$.postrl、data、delegate这样的行进行操作,其中数据是一个json对象,包含要发送给处理程序的参数。当服务器返回数据或错误时,将执行委托。尽管如此@Phil是对的,没有特别需要支持Ajax的WCF服务。。。它沉重、臃肿、浪费资源。此外,如果您的数据访问层吐出对象,您可以始终将它们作为json返回……请注意,使用[ScriptMethod]将您的代码与旧的ASMX web服务技术联系在一起,而旧的ASMX web服务技术在很大程度上已被WCF所取代。[ScriptMethod]可以被WCF取代,但我可能相信,如果只从页面调用该方法,并且简单性比通用性更重要,这是一个好主意。它可能是一个古老的传统,但它可以工作,而且简单而优雅。有话要说。@mattmc:是的,有话要说,但有很多话要说。考虑一下:新开发人员需要多长时间才能看到这些代码而不知道[PageMethod]是什么?请注意,使用[ScriptMethod]将您的代码与旧的ASMX web服务技术联系在一起,而旧的ASMX web服务技术在很大程度上已被WCF所取代。[ScriptMethod]可以被WCF取代,但我可能相信,如果只从页面调用该方法,并且简单性比通用性更重要,这是一个好主意。它可能是一个古老的传统,但它可以工作,而且简单而优雅。有话要说。@mattmc:是的,有话要说,但有很多话要说。考虑一下:新开发人员需要多长时间才能看到这些代码并且不知道[PageMethod]是什么?@John-因为@RPM在这里不再有评论,乍一看你好像是在回应@Davita,顺便说一句,谁的答案是正确的。支持Ajax的WCF服务是一条路——如果你愿意忍住鼻子使用WCF,那就是。@John——因为@RPM在这里不再有评论,乍一看你好像在回应@Davita,顺便说一句,谁的答案是正确的。支持Ajax的WCF服务是一条路——如果你愿意挺住鼻子使用WCF,那就是。