使用AJAX进行WCF调用

Dot*_*ude 5 asp.net ajax wcf jquery .net-4.0

  1. 是否需要使用RESTful服务才能对wcf服务进行ajax调用(例如:通过WebInvoke在Operation契约上使用 属性)
  2. 一旦通过webHttp在服务主机上添加绑定使服务成为RESTful,主机是否也可以拥有其他端点?(wsHttpnetTcp)
  3. 它是需要aspNetCompatibilityEnabled(并且可以此设置共存其他端点)设置为true有webHttp绑定服务
  4. 我知道我可以使用JQuery和ScriptManager在客户端上进行WCF调用.我为什么要使用一个而不是另一个?

Che*_*eso 4

答案

  1. 不会
    。AJAX 通常用于发送简单的 HTTP GET(“REST”)请求。事实并非一定如此。您还可以使用 SOAP 信封格式化有效负载,并将其 POST 到端点。wsHttp在这种情况下,WCF 服务至少必须是basicHttpBinding。下面是使用 VBScript 创建和发送 SOAP 请求的示例,但您也可以在 Javascript 中执行相同的操作。您无法使用更高级的 SOAP 扩展,例如 WS-Security、XML DigSig 等。好吧,你可以,但这是不切实际的。例如,我不知道 Javascript 中有任何 XML 规范化库,而这对于进行 WS-Security 或数字签名至关重要。类似的障碍还有17个。结果:从 Javascript 调用时无法使用更高级的 SOAP 扩展。

    如果您使用 jQuery ajax,则需要使用beforeSendajax 请求上的回调来设置 SOAPAction 标头。

    话虽如此,在 Javascript 程序中处理 json 比遍历 XML 文档的 DOM 容易得多。换句话说,从 Javascript 连接到 WCF 时,最好使用 JSON/REST,而不是 SOAP。我想有时这不是一个选择。


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

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

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