博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)
阅读量:7126 次
发布时间:2019-06-28

本文共 3356 字,大约阅读时间需要 11 分钟。

JSONP(JSON with Padding)可以看成是JSON的一种“使用模式”,用以解决“跨域访问”的问题,这篇简单的文章给出一个简单的例子用于模拟如何通过jQuery以JSONP的访问调用一个WCF REST服务。[源代码从下载]

在这个例子中,我们将定义一个用于返回所有员工信息的服务,下面是用于表示员工信息的Employee的类型和契约接口。契约接口IEmployees的GetAll操作用以返回所有员工列表,我们指定了Uri模板并将回复消息格式设置为JSON。

1: using System.Collections.Generic;
2: using System.ServiceModel;
3: using System.ServiceModel.Web;
4: namespace Artech.WcfServices.Service.Interface
5: {
6:     [ServiceContract]
7:     public interface IEmployees
8:     {
9:         [WebGet(UriTemplate = "all",ResponseFormat =WebMessageFormat.Json)]
10:         IEnumerable
GetAll();
11:     }
12:     public class Employee
13:     {
14:         public string Id { get; set; }
15:         public string Name { get; set; }
16:         public string Department { get; set; }
17:         public string Grade { get; set; }
18:     }
19: }

在如下所示的服务类型EmployeesService 中,我们直接让服务操作GetAll返回一个包含3个Employee对象的列表。

1: using System.Collections.Generic;
2: using Artech.WcfServices.Service.Interface;
3: namespace Artech.WcfServices.Service
4: {
5:     public class EmployeesService : IEmployees
6:     {
7:         public IEnumerable
GetAll()
8:         {
9:             return new List
10:             {
11:                 new Employee{ Id = "001", Name="张三", Department="开发部", Grade = "G6"},
12:                 new Employee{ Id = "002", Name="李四", Department="人事部", Grade = "G7"},
13:                 new Employee{ Id = "003", Name="王五", Department="销售部", Grade = "G8"}
14:             };
15:         }
16:     }
17: }

我们通过控制台程序对服务进行寄宿。从下面的配置可以看到我们采用了标准终结点WebHttpEndpoint。为了让服务具有跨域支持的能力,我们必须将标准终结点的crossDomainScriptAccessEnabled属性设置为True。WebHttpBinding也具有同名的属性,如果直接使用WebHttpBinding也需要将该属性设置为True。

1: 
2:   
3:     
4:       
5:         
6:       
7:     
8:     
9:       
10:         
11:       
12:     
13:     
14:       
15:         
16:                   address="http://127.0.0.1:3721/employees"
17:                   contract="Artech.WcfServices.Service.Interface.IEmployees"/>
18:       
19:     
20:   
21: 

在客户端,我们在一个Web页面中通过jQuery进行Ajax调用这个服务,并将得到的员工列表显示在一个表格中。出CSS之外的页面代码如下所示,需要注意的是在进行Ajax调用的使用将dataType选项设置成“jsonp”,而不是“json”。

1: 
2: 
3:   
4:     员工列表
5:     
6:        ...
7:     
8:     
9:     
10:         $(function () {
11:             $.ajax({
12:                 type: "get",
13:                 url: "http://127.0.0.1:3721/employees/all",
14:                 dataType: "jsonp",
15:                 success: function (employees) {
16:                     $.each(employees, function (index, value) {
17:                         var detailUrl = "detail.html?id=" + value.Id;
18:                         var html = "";
19:                         html += value.Id + "";
20:                         html += "" + value.Name + "";
21:                         html += value.Grade + "";
22:                         html += value.Department + "";
23:                         $("#employees").append(html);
24:                     });
25:                     $("#employees tr:odd").addClass("oddRow");
26:                 }
27:             });
28:         });
29:      
30:   
31:   
32:     
33:         
34:             ID
35:             姓名
36:             级别
37:             部门
38:         
39:     
40: 
41: 

当服务启动后在浏览器中显示上面这个Web页面,会得到如下所示的员工列表。

转载地址:http://mvael.baihongyu.com/

你可能感兴趣的文章
socket编程的select模型
查看>>
智能医疗的春天在哪里?
查看>>
Kali Linux 无线渗透测试入门指南 第二章 WLAN 和固有的不安全性
查看>>
MyExcel 2.1.2 版本发布,重要 Bug 修复
查看>>
广汽与蔚来达成合作,将共同投资12.8亿元创立新能源汽车公司
查看>>
量子力学,整合了三种自然相互作用力
查看>>
亚马逊新专利,让无人机运送充电器为电动车充电
查看>>
HTC将Viveport推向全球,这是要“反击”Valve的节奏?
查看>>
【深度学习不是犯罪】欧盟祭出最严数据保护法:专家解读 GDPR
查看>>
浅谈SQL Server 对于内存的管理
查看>>
喜报销发布V2.4,圣诞焕新装,新增“专项费用报销”审批,集成京东商城
查看>>
陈天奇团队新研究:自动优化深度学习工作负载
查看>>
你的无人机快递来了?小心被查“水表”
查看>>
收录 Uboot 详解
查看>>
MongoDB数据库的索引操作(转)
查看>>
线程的实现
查看>>
重建日志文件
查看>>
鱼鹰软件荣获“北京广告产业发展30周年”杰出贡献单位奖
查看>>
四、oracle基本sql语句和函数详解
查看>>
中合国创杯2017年创客中国互联网+创新创业大赛复赛成功举办 20各项目入围总决赛...
查看>>