Asp.net 使用AJAX进行WCF调用 是否需要使用RESTful 服务能够生成一个ajax 调用wcf服务(例如:通过使用 WebInvoke操作上的属性 (合同) 一旦通过在服务主机上添加webHttp绑定使服务变得RESTful,主机是否也可以有其他端点?(wsHttp或netTcp) 对于具有webHttp绑定的服务,是否需要将aspNetCompatibilityEnabled设置为true(对于其他端点,此设置是否可以共存) 我知道我可以使用JQuery和ScriptManager在客户端进行WCF调用。为什么我要用一个而不是另一个

Asp.net 使用AJAX进行WCF调用 是否需要使用RESTful 服务能够生成一个ajax 调用wcf服务(例如:通过使用 WebInvoke操作上的属性 (合同) 一旦通过在服务主机上添加webHttp绑定使服务变得RESTful,主机是否也可以有其他端点?(wsHttp或netTcp) 对于具有webHttp绑定的服务,是否需要将aspNetCompatibilityEnabled设置为true(对于其他端点,此设置是否可以共存) 我知道我可以使用JQuery和ScriptManager在客户端进行WCF调用。为什么我要用一个而不是另一个,asp.net,jquery,ajax,wcf,.net-4.0,Asp.net,Jquery,Ajax,Wcf,.net 4.0,答复 否。 AJAX通常用于发送简单的HTTP GET(“REST”)请求。不必如此。您还可以使用SOAP信封格式化有效负载,并将其发布到端点。在这种情况下,WCF服务必须至少是wsHttp或basicHttpBinding。下面是一个示例,但您可以在Javascript中执行同样的操作。您不能使用更高级的SOAP扩展,如WS-Security、XMLDigsig等。嗯,你可以,但那是不切实际的。例如,我不知道Javascript中有任何XML规范化库,这对于实现WS-Security或数字签名

答复

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


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

  • 否。
    aspNetCompatibilityEnabled
    仅在服务器上启用一些类似ASMX的功能。它影响服务的设计方式,并且独立于消息签名。它确实排除了非HTTP协议的使用。有关这方面的更多信息,请参阅

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


  • @Cheeso-如果我在客户端使用JQuery进行AJAX调用,我假设(1)的答案是肯定的,因为我现在必须使用Json作为响应,这可以通过应用WebGet属性并将RequestFormat更改为Json来实现?这从本质上说不会将此服务转变为RESTful服务吗?不会。您可以使用jQueryAjax并指定dataType='xml',以指示您希望从服务器获得的数据类型。如果是XML,jQuery不会自动将响应作为json值进行计算。