【问题标题】:Making a WCF call with AJAX使用 AJAX 进行 WCF 调用
【发布时间】:2010-03-12 16:37:53
【问题描述】:
  1. 是否需要使用 RESTful 能够制作ajax的服务 调用 wcf 服务(例如:通过使用 WebInvoke 操作属性 合同)
  2. 一旦通过在服务主机上添加webHttp 绑定使服务成为RESTful,主机是否也可以有其他端点? (wsHttpnetTcp
  3. 对于具有 webHttp 绑定的服务,是否需要aspNetCompatibilityEnabled 设置为 true(并且此设置是否可以与其他端点共存)
  4. 我知道我可以同时使用 JQuery 和 ScriptManager 在客户端上进行 WCF 调用。为什么我应该使用一个而不是另一个?

【问题讨论】:

    标签: asp.net jquery ajax wcf .net-4.0


    【解决方案1】:

    答案

    1. 编号
      AJAX 通常用于发送简单的 HTTP GET(“REST”)请求。不必如此。您还可以使用 SOAP 信封格式化有效负载,并将其发布到端点。在这种情况下,WCF 服务至少必须是 wsHttp 或 basicHttpBinding。这里是an example of using VBScript to create and send a SOAP request,但你可以在 Javascript 中做同样的事情。您不能使用更高级的 SOAP 扩展,例如 WS-Security、XML DigSig 等等。好吧,您可以,但这不切实际。例如,我不知道 Javascript 中有任何 XML 规范化库,这对于进行 WS-Security 或数字签名至关重要。有 17 个类似的障碍。结果:从 Javascript 调用时,您无法使用更高级的 SOAP 扩展。
      .
      如果您使用 jQuery ajax,则需要在 ajax 请求上使用 beforeSend 回调来设置 SOAPAction 标头。
      .
      话虽如此,在 Javascript 程序中处理 json 比遍历 XML 文档的 DOM 要容易得多。换句话说,从 Javascript 连接到 WCF 时最好使用 JSON/REST,而不是 SOAP。有时这不是一个选择,我猜。

    2. 是的
      WCF 服务可以有多个端点,它们可以侦听相同或不同的传输,例如 HTTP、net.tcp、net.pipe 或 net.msmq。

    3. 没有。 aspNetCompatibilityEnabled 只是在服务器上启用了一些类似 ASMX 的功能。它影响服务的设计方式,并且独立于消息签名。它确实排除了使用非 HTTP 协议。有关更多信息,请参阅Wenlong Dong's article

    4. 至于在客户端上使用哪个框架 - 哪个更容易?我没有使用 ScriptManager 的经验,但决策标准非常简单。 jQuery 工作得很好,如果你已经在使用 jQuery,它是合适的。如果您没有或不想要 jQuery,您可以使用 XmlHttpRequest 发送 SOAP 或 REST 请求。如果这些不合适,请使用其他东西。

    【讨论】:

    • @Cheeso - 如果我在客户端使用 JQuery 进行 AJAX 调用,我假设 (1) 的答案是肯定的,因为我现在必须使用 Json 作为响应,这可以是通过应用 WebGet 属性并将 RequestFormat 更改为 Json 来完成?这不会本质上把这个服务变成一个 RESTful 服务吗?
    • 没有。您可以使用 jQuery ajax 并指定 dataType='xml',以指示您期望从服务器获得的数据类型。如果是 XML,jQuery 将不会自动将响应评估为 json 值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 2015-07-22
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多