科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件深入Atlas系列之服务器端支持(下)

深入Atlas系列之服务器端支持(下)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

我们知道,处理Web Services方法请求的Handler是RestHandler

作者:老赵 来源:博客园 2007年11月3日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
范例1:在Web Services方法中使用复杂的数据类型。

  首先,我们定义两个表示数据的类,Employee和Company。代码如下:

  Employee与Company代码:

1 [Serializable]
2 public class Employee : IComparable<Employee>
3 {
4 public string Name;
5
6 public int Age;
7
8 #region IComparable<Employee> Members
9
10 public int CompareTo(Employee other)
11 {
12 return this.Name.CompareTo(other.Name);
13 }
14
15 #endregion
16 }
17
18 [Serializable]
19 public class Company
20 {
21 public string Name;
22
23 public Employee[] Employees;
24 }

  接着我们定义一个Web Services方法Sort,该方法的作用是拿到公司姓名和一个Employee数组作为参数,将Employee按照姓名排序之后,再组成一个Company对象输出。代码如下:

  Sort方法

1 [WebService(Namespace = "http://tempuri.org/")]
2 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
3 public class ComplexTypeWS : System.Web.Services.WebService {
4
5 [WebMethod]
6 public Company Sort(string companyName, Employee[] employees)
7 {
8 Array.Sort<Employee>(employees);
9
10 Company company = new Company();
11 company.Name = companyName;
12 company.Employees = employees;
13 return company;
14 }
15 }

  然后就是HTML了。在页面最上方(id为employees的div)会显示内存中目前所有的Employee,之后是向内存中添加Employee的输入框,接着是填写公司名的文本框和排序按钮,最后则是经过了Web Services排序后的结果显示区域(id为sortedDisplay的div):

  HTML代码:

1 <body style="font-family:Verdana; font-size: 14px;">
2 <form id="form1" runat="server">
3 <atlas:ScriptManager runat="server" ID="ScriptManager1" />
4
5 <div>Employees:</div>
6 <div id="employees"></div>
7 <hr />
8 <div>Add Employee:</div>
9 <div>Name: <input type="text" id="empName" /></div>
10 <div>Age: <input type="text" id="empAge" /></div>
11 <input type="button" value="Add employee" onclick="addEmployee()" /><br />
12 <hr />
13 <div>Company Name:<input type="text" id="companyName" /></div>
14 <input type="button" value="Sort!" onclick="sort()" /><br />
15 <hr />
16 <div id="sortedDisplay"></div>
17 </form>
18 </body>

  最后我们来看Javascript代码:

  Javascript代码:

1 <script language="javascript">
2 // 内存中的Employee数组
3 var empArray = new Array();
4
5 // 添加一个Employee
6 function addEmployee()
7 {
8 // 建立一个对象表示Employee
9 var emp = new Object();
10 emp.Name = $('empName').value;
11 emp.Age = parseInt($("empAge").value, 10);
12
13 // 加入数组
14 empArray.push(emp);
15
16 // 更新最上方的显示
17 updateSource();
18 }
19
20 // 将内存中的empArray数组显示在id为employee的div中
21 function updateSource()
22 {
23 var html = "";
24
25 for (var i = 0; i < empArray.length; i++)
26 {
27 var emp = empArray[i];
28 html += ((i + 1) + ". " + emp.Name + ", " + emp.Age + " years old.<br />")
29 }
30
31 $("employees").innerHTML = html;
32 }
33
34 // 访问Web Service进行排序
35 function sort()
36 {
37 // 构造参数
38 var params = { "companyName" : $("companyName").value, "employees" : empArray };
39 // 构造Web Service方法访问对象
40 var method = new Sys.Net.ServiceMethod("ComplexTypeWS.asmx", "Sort", null);
41
42 // 调用Web Service方法
43 method.invoke(params, onMethodComplete);
44 }
45
46 // 回调函数
47 function onMethodComplete(company, response, userContext)
48 {
49 // 在id为sortedDisplay的div中显示所有的Employee,
50 // 可以发现company对象和服务器端对象的结构相同
51 var html = "Company Name: " + company.Name;
52 for (var i = 0; i < company.Employees.length; i++)
53 {
54 var emp = company.Employees[i];
55 html += ("<br />" + (i + 1) + ". " + emp.Name + ", " + emp.Age + " years old.")
56 }
57
58 $("sortedDisplay").innerHTML = html;
59
60 // 清空内存中的Employee
61 empArray.length = 0;
62 // 更新最上方的显示
63 updateSource();
64 }
65 </script>

  所有的代码都在这里,我们来看一下使用。首先打开页面,输入数个Employee,如图:


  然后点击填写好Company Name并点击Sort按钮,则可以看出按照姓名排序后的结果:


  我们使用Fiddler查看一下数据传输,可以看到Request Body和Response Body里的JSON代码:


  可以看出,Atlas使用了JSON方式传递数据非常的直观,对于复杂的类型支持也非常好。在客户端得到的对象,其结构和服务器端相同,这对于开发人员带来了不小的便利。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章