【问题标题】:How do you add an AJAX call to a WCF web service to an ASP.NET web page using jQuery?如何使用 jQuery 向 ASP.NET 网页添加对 WCF Web 服务的 AJAX 调用?
【发布时间】:2012-03-30 08:21:18
【问题描述】:

我在网上看到了一堆示例,但对于该服务应该是独立的还是与消费应用程序在同一个解决方案中,我感到困惑。有人可以帮帮我吗?

  1. 是否需要将启用 AJAX 的 WCF 服务类型的文件添加到我的 ASP.NET Web 应用程序,或者我是否需要对我的 WCF 服务的 Web 服务引用?

  2. 当我使用 jQuery Ajax 函数时,有一个 URL 参数。我看到的所有示例都使用“Services/MyService.svc/MyMethodName”。这是因为服务在 Web 应用程序的解决方案中吗?

  3. 我的 WCF 服务是否必须:

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

  4. 我的网络服务调用是否需要具有以下属性?

    [WebInvoke(方法 = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]

  5. 我的 Web 应用程序或我的 Web 服务是否需要将行为设置为 enableWebScript

我是否遗漏了任何必需的属性或设置?

这是我的 Web 应用程序中的 jquery ajax 请求:

$.ajax({
type: "POST",
url: "http://myserver/myservice.svc/mymethod",
contentType: "application/json; charset=utf-8",
data: "{" + args + "}",
dataType: 'json',
});

这是我的网络服务 web.config:

  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="Basic" />
      </basicHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="ServiceBehavior" name="MyServiceName">
        <endpoint address="basic" 
                  binding="basicHttpBinding"
                  bindingConfiguration="Basic" 
                  name="Basic" 
                  contract="IService" />
        <endpoint address="web"
                  behaviorConfiguration="webHttpBehavior"
                  binding="webHttpBinding"
                  name="Web"
                  contract="IService" />
        <endpoint address="mex" 
                  binding="mexHttpBinding"
                  name="Metadata"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webHttpBehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

【问题讨论】:

    标签: jquery asp.net ajax wcf


    【解决方案1】:
    1. 不,你可以直接调用它
    2. 有点像。这是基于网页与服务在您的托管环境中的位置的相对路径
    3. 是的
    4. 如果您打算 POST 到服务方法,可以。
    5. 是的,在服务上

    包括

       <serviceMetadata httpGetEnabled="true"/> 
    

    在您的服务端点行为中。

    【讨论】:

    • 我不明白#2。如果我的 asp.net Web 应用程序在解决方案中没有 Web 服务,但 Web 服务托管在开发服务器上,那么我的 url 应该是什么?我需要对开发服务器的http使用绝对地址吗?
    • 绝对路径总是有效的,WCF 不在乎你使用哪个,只要它们能解决。在您的情况下,听起来您需要一个绝对服务 URL。
    • 如果我使用 JSON,我的 WCF 服务是否需要比 basicHttpBinding 更多的东西?我需要 webHttp 吗?
    • JSON 将适用于任何绑定,它们是不相关的。 webHTTP 面向 REST,因此它支持 WebGet 和 WebInvoke 选项 - 所以我认为对于您的要求,您需要 webHttp。如果您正在构建 RESTful 服务,如果您不需要 SOAP 支持,也可以考虑使用 MVC。它更简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2015-04-27
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多