【发布时间】:2010-12-03 23:47:05
【问题描述】:
我只想简单地通过 ajax 在我的 Web 服务上调用一个方法并让它返回一个值。
我应该使用“WCF 服务”、“支持 AJAX 的 WCF 服务”还是“Web 服务”
哪个最简单?
【问题讨论】:
标签: c# asp.net wcf web-services
我只想简单地通过 ajax 在我的 Web 服务上调用一个方法并让它返回一个值。
我应该使用“WCF 服务”、“支持 AJAX 的 WCF 服务”还是“Web 服务”
哪个最简单?
【问题讨论】:
标签: c# asp.net wcf web-services
改为使用通用 HTTP 处理程序。它们更易于编码。
【讨论】:
您应该使用支持 Ajax 的 WCF 服务。我不记得确切的名称,但它应该标有一个可以从 JS 访问的属性。
【讨论】:
除非您要维护现有代码并且无法更改,否则您永远不应使用“Web 服务”模板。
【讨论】:
如果您只是调用单个方法,请使用 ScriptMethod
您可以将其编码到使用它的页面内联。 http://www.asp.net/ajax/tutorials/understanding-asp-net-ajax-web-services
使用 ScriptMethod 属性
ScriptService 属性是 只有 ASP.NET AJAX 属性具有 在 .NET Web 服务中定义 让 ASP.NET 使用它 AJAX 页面。然而,另一个属性 命名 ScriptMethod 也可以应用 直接到服务中的 Web 方法。 ScriptMethod 定义了三个属性 包括UseHttpGet、ResponseFormat 和 XmlSerializeString。改变 这些属性的值可以是 在类型的情况下很有用 Web 方法需要接受的请求 改成 GET,当一个 Web 方法需要返回原始 XML 数据 XmlDocument 的形式或 XmlElement 对象或当数据 从服务返回应始终 被序列化为 XML 而不是 JSON。
可以使用 UseHttpGet 属性 什么时候 Web 方法应该接受 GET 请求而不是 POST 请求。 使用带有 Web 的 URL 发送请求 方法输入参数转换为 查询字符串参数。 UseHttpGet 属性默认为 false 并且应该 仅在操作时设置为 true 已知是安全的,何时 敏感数据不会传递到 Web 服务。清单 6 显示了一个示例 将 ScriptMethod 属性与 UseHttpGet 属性。
【讨论】:
[ScriptMethod] 会将您的代码绑定到旧的 ASMX Web 服务技术,该技术已在很大程度上被 WCF 取代。 [ScriptMethod] 可以被 WCF 替换,但我可能会相信,仅从页面调用该方法是一个好主意,并且简单性比通用性更重要。
如果这些是您唯一的选择,我发现启用 AJAX 的 WCF 服务是最容易使用的。它仍然是 WCF,但它为您提供了正确的 web.config 设置模板,并抛弃了普通的“WCF 服务”模板为您提供的界面。就简单上手而言,它似乎是整个 WCF 混乱中最接近旧 ASMX 风格的东西。
作为另一种选择,如果您碰巧能够在您的 webforms 项目中使用 ASP.NET MVC 并且只需要它来进行 ajax 调用,您可以完全跳过 web 服务 hoopla 并为您的 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>
大量选项 - 选择最适合您情况的选项。
【讨论】: