当前位置: 首页 > 面试题库 >

在另一个项目(跨域)中通过AJAX调用在jQuery中使用WCF服务

龚凌
2023-03-14
问题内容

我正在使用已下载的WCF jQuery
AJAX呼叫示例。我可以运行它并使它在同一项目中工作。当我从同一解决方案中的不同项目访问同一项目时,它什么也不做。以下是我正在调用的方法。

    function WCFJSON() {

        var parameter = "1234567890 (Cross Domain)";
        Type = "GET";
        Url = "http://localhost:52729/jQueryWebSite/Service.svc/Test?Id=" + parameter;
        Data = '{"Id": "' + parameter + '"}';
        ContentType = "application/json; charset=utf-8";
        DataType = "jsonp"; ProcessData = false;
        CallService();
    }

    $(document).ready(function () {
        WCFJSON();
    });

我在成功和失败方法中有alert()。

当我直接在浏览器中运行URL时,它将返回我结果。但是,如果我从其他项目中运行它,它什么也没做。没有警报,没有结果。

以下是我的服务正在运行的项目的Web.Config;

<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
    <compilation debug="true">
        <assemblies>
            <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/></assemblies>
    </compilation>
    <authentication mode="Windows"/>
</system.web>
<system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <providerOption name="CompilerVersion" value="v3.5"/>
        <providerOption name="WarnAsError" value="false"/>
      </compiler>
    </compilers>
  </system.codedom>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehavior">
                    <serviceMetadata httpGetEnabled="true"/>
                    <serviceDebug includeExceptionDetailInFaults="true"/>
                </behavior>
            </serviceBehaviors>
            <endpointBehaviors>
                <behavior name="EndpBehavior">
                    <webHttp/>
                </behavior>
            </endpointBehaviors>
        </behaviors>
        <services>
            <service behaviorConfiguration="ServiceBehavior" name="Service">
                <endpoint address="" binding="webHttpBinding" contract="IService" behaviorConfiguration="EndpBehavior"/>
            </service>
        </services>
    </system.serviceModel>
</configuration>

与Web.config或脚本中的任何错误有关吗?我遵循了很多方法,并尝试了各种方法。


问题答案:

我找不到跨域WCF jQuery AJAX调用的任何解决方案。因此,我在这里发布我如何解决此问题的信息。

在AJAX调用中使用GET方法时,无需提供数据。

在jQuery AJAX调用中使用WCF(跨域)时必须考虑的事项;

  1. 在Visual Studio的单独实例中运行WCF服务项目。不要将WCF服务项目和消耗项目混合在一个实例中并立即运行。运行消费项目时,WCF项目必须已经启动并正在运行。
  2. 使用DataType jsonp代替json
  3. 在WCF项目的web.config文件,确保您有属性crossDomainScriptAccessEnabled="true"<binding>下标记<system.serviceModel>\<bindings>\<webHttpBinding>。还将绑定名称设置为标记中的bindingConfigurationattribute <endpoint>

有关更多信息,以下是我的jQuery AJAX调用;

$.ajax({
   cache: false,
   type: "GET",
   async: false,
   processData: true,
   data: "",
   url: "http://localhost:64973/Account.svc/GetAccountByID/2000",
   contentType: "application/json",
   dataType: "jsonp",
   success: function (result) {
       alert(result);
       alert(result.GetAccountByIDResult);
   }
});

以下是我的web.config;

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="crossDomain" crossDomainScriptAccessEnabled="true" />
      </webHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="tSeyvaWCFEndPointBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="tSeyvaServiceBehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <services>
      <service name="tSeyva.WCF.Account" behaviorConfiguration="tSeyvaServiceBehavior">
        <endpoint address=""
                  behaviorConfiguration="tSeyvaWCFEndPointBehavior"
                  bindingConfiguration="crossDomain"
                  binding="webHttpBinding"
                  contract="tSeyva.WCF.IAccount">
        </endpoint>
      </service>
    </services>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>


 类似资料:
  • 本文向大家介绍jQuery ajax调用WCF服务实例,包括了jQuery ajax调用WCF服务实例的使用技巧和注意事项,需要的朋友参考一下 恩,在由瘦客户端转换成胖浏览器端的“潮流”下,必然要使用JavaScript调用后台的各种服务。 屌丝所维护的产品通信都是使用的WCF服务,因此必然要学习这样的内容。借用jQuery强大的库,使用JavaScript访问WCF服务非常简便。同事研究了一个b

  • 问题内容: 我了解AJAX跨域策略。因此,我不能仅通过ajax HTTP请求调用“ http://www.google.com ”,并将结果显示在我的网站上。 我使用dataType“ jsonp”进行了尝试,这实际上可以工作,但是出现语法错误(显然是因为接收到的数据不是JSON格式的) 还有其他可能性可以从外部域接收/显示数据吗?iFrame是否遵循相同的政策? 问题答案: 使用AJAX获取跨域

  • 我正在构建一个定制的Java库。我把我的大部分“重复”代码都保存在那里,比如文件处理、字符串处理等。每次我想使用它们时,我都必须将该类复制并粘贴到我正在进行的其他项目中。有没有办法让这个自定义库类成为“依赖项”?我在用我的智能手机。

  • 本文向大家介绍jQuery Ajax调用WCF服务详细教程,包括了jQuery Ajax调用WCF服务详细教程的使用技巧和注意事项,需要的朋友参考一下 这两天在写基于WCF服务的后台框架,过程中遇到了一些挫折,经过努力全部解决了,在此分享给大家,使用的工具是Visual Studio 2013。 该后台需要支持通过json来传递和接收数据。 首先,说说搭建过程。 第一步:创建WCF服务应用程序项目

  • 我一直在遵循这个例子 使用jQuery创建和使用WCF Restful服务 我收到以下错误: XMLHttp请求无法加载http://localhost:48839/EmployeeService.svc/GetEmployeeDetails/.对预检请求的响应未通过权限改造检查:请求的资源上不存在“访问控制允许起源”标头。因此不允许访问起源“http://localhost:57402”。响应具

  • 我正在构建一个使用Cordova/PhoneGap和JQuery Mobile的应用程序。 我想在应用程序中使用JQuery,但我无法让它工作-即使使用简单的代码,也不会发生任何事情。 我相信我的标题设置正确: 当我看到JQuery移动风格的标题和后退按钮等时。 但是当我尝试一些简单的事情时,比如: 在MyScript中。我什么都没有得到。我是否需要以不同的方式触发JQuery?有人能给我指出正确