我正在使用已下载的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(跨域)时必须考虑的事项;
jsonp
json
crossDomainScriptAccessEnabled="true"
<binding>
<system.serviceModel>\<bindings>\<webHttpBinding>
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>