gpt4 book ai didi

jquery - 在不同项目中通过 AJAX 调用使用 jQuery 中的 WCF 服务(跨域)

转载 作者:行者123 更新时间:2023-12-01 01:25:40 25 4
gpt4 key购买 nike

我正在使用我已下载的 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. 使用数据类型为 jsonp而不是json .
  3. 在 WCF 项目的 web.config 中,确保具有属性 crossDomainScriptAccessEnabled="true"<binding>标签 <system.serviceModel>\<bindings>\<webHttpBinding> 。绑定(bind)名称也设置为 bindingConfiguration <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 调用使用 jQuery 中的 WCF 服务(跨域),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14586328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com