使用AJAX进行WCF调用

时间:2010-03-12 16:37:53

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

  1. 必需使用RESTful 服务能够制作ajax 调用wcf服务(例如:通过使用 操作的WebInvoke属性 合同)
  2. 通过在服务主机上添加webHttp绑定使服务成为RESTful,主机是否也可以拥有其他端点? (wsHttpnetTcp
  3. 必需对于具有webHttp绑定的服务,aspNetCompatibilityEnabled设置为true(并且此设置可以与其他端点共存)
  4. 我知道我可以使用JQuery和ScriptManager在客户端上进行WCF调用。我为什么要用另一个呢?

1 个答案:

答案 0 :(得分:4)

答案

  1. 没有。
    AJAX通常用于发送简单的HTTP GET(“REST”)请求。它不一定是这样。您还可以使用SOAP信封格式化有效内容,并将其POST到端点。在这种情况下,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而不是SOAP时,最好使用JSON / REST。我想有时它不是一种选择。

  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请求。如果这些不合适,请使用其他东西。