JSONP 跨域请求WCF
2016-12-15 10:44
274 查看
模拟建两个项目,一个WcfService,一个 Asp.Net
一、Service WCF
1、IService1.cs 注意要加上注解[WebGet()],否则客户端不能访问到
2、Service1.svc
注意加上[AspNetCompatibilityRequirements]注解,
3、Web.config.注意高亮部分的配置 binding="webHttpBinding"
二、Web Ajax
一、Service WCF
1、IService1.cs 注意要加上注解[WebGet()],否则客户端不能访问到
[OperationContract] [WebGet()] Stream GetData(string callback);
2、Service1.svc
注意加上[AspNetCompatibilityRequirements]注解,
返回类型以Stream 代替string,避免返回的内容带有双引号,比如若返回 "call({msg:'Hello'})",客户端就不会执行ajax里的success或者自定义的callback函数。正确的是返回不带双引号的 call({msg:'Hello'}) 这样客户端会去执行call函数。
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class Service1 : IService1 { public Stream GetData(string callback) { string jsCode = callback+"({msg:'Hello,I am from WCF'})"; return new MemoryStream(Encoding.UTF8.GetBytes(jsCode)); // return "call({msg:'Hello,I am from WCF'})"; } }
3、Web.config.注意高亮部分的配置 binding="webHttpBinding"
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.serviceModel> <services> <service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior"> <!-- Service Endpoints --> <endpoint address="" binding="webHttpBinding" contract="WcfService1.IService1" behaviorConfiguration="WcfService1.EndBehavior"> </endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="WcfService1.Service1Behavior"> <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 --> <serviceMetadata httpGetEnabled="true"/> <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 --> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="WcfService1.EndBehavior"> <webHttp/> </behavior> </endpointBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration>
二、Web Ajax
<script type="text/javascript"> function getData() { var url1 = "http://localhost:6199/WebForm1.aspx?callback=?"; jQuery.getJSON(url1, function (data) { alert("执行了success 1: " + data.msg); }); var url2 = "http://localhost:6199/Service1.svc/GetData?callback=?"; $.getJSON(url2, function (data) { alert("执行了success 2: " + data.msg); }); $.ajax({ type: "get", url: "http://localhost:6199/Service1.svc/GetData", dataType: "jsonp", success: function (data) { alert("执行了success 3: " + data.msg); }, error: function (error) { alert("调用出错"); } }); $.ajax({ type: "get", url: "http://localhost:6199/Service1.svc/GetData", dataType: "jsonp", jsonpCallback: "call", success: function (data) { alert("这里不会执行!"); }, error: function (error) { alert("调用出错"); } }); } function call(data) { alert("执行了call: " 4000 + data.msg); } getData(); </script>
相关文章推荐
- JSONP 跨域请求WCF
- springboot跨域请求,实现跨域jsonp请求服务端数据自动封装
- Ajax的jsonp跨域请求样例
- jQuery中JSONP结合Spring MVC实现跨域请求
- Ajax+Spring MVC实现跨域请求(JSONP)
- 跨域请求解决方法(JSONP, CORS)
- AJAX 跨域请求 - JSONP获取JSON数据
- spring mvc ajax jsonp 跨域请求 返回值 配置
- ajax跨域jsonp并且post请求No 'Access-Control-Allow-Origin'以及执行error时readyState=4同时status=200的解决方法
- PHP AJAX JSONP实现跨域请求使用实例
- js便签笔记(13)——jsonp其实很简单【ajax跨域请求】
- jsonp其实很简单【ajax跨域请求】
- php Jsonp 跨域 请求
- Ajax跨域请求--Jsonp
- jQuery jsonp跨域请求
- AJAX 跨域请求 - JSONP获取JSON数据
- 一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)
- asp jquery ajxs json和jsonp跨域请求
- AJAX 跨域请求 – JSONP的使用,PHP实例详解
- 来说说SpringMVC + JSONP的跨域请求