科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

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

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

关键字:

  • 评论
  • 分享微博
  • 分享邮件
范例2:使用Web Services将对象序列化成XML并使用客户端XSLTView空间输出信息

  使用了与上例相同的Employee和Company两个类,在这里就不重复了,先来看一下Web Service方法GetXmlSerializedCompany的代码:

  GetXmlSerializedCompany方法代码:

1 [WebService(Namespace = "http://tempuri.org/")]
2 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
3 public class ComplexTypeWS : System.Web.Services.WebService {
4
5 [WebMethod]
6 [WebOperation(false, ResponseFormatMode.Xml)]
7 public Company GetXmlSerializedCompany(Company company)
8 {
9 return company;
10 }
11 }

  这个方法简单地令人惊讶,只是直接将参数返回。其精妙之处就是使用了Microsoft.Web.Services.WebOperationAttribute进行标记,表明了该方法将以XML形式输出。

  接下来是HTML,与上例非常的相似,就不多作解释了。代码如下:

  HTML代码:

1 <atlas:ScriptManager ID="ScriptManager1" runat="server" />
2
3 <form id="form1" runat="server">
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="Serialize!" onclick="serialize()" /><br />
15 <hr />
16 <div id="xmlDisplay"></div>
17
18 </form>

  然后准备一下Atlas Xml Script,声明一个XmlDataSource,用来获得XSLT文件。再添加一个XSLTView,将其transform属性与XmlDataSource的document属性绑定起来。代码如下:

  Atlas Xml Script代码:

1 <script type="text/xml-script">
2 <page>
3 <components>
4 <xmlDataSource id="xsltSource" autoLoad="true" serviceURL="Company.xsl" />
5 <xsltView id="xmlDisplay">
6 <bindings>
7 <binding property="transform" dataContext="xsltSource" dataPath="document" />
8 </bindings>
9 </xsltView>
10 </components>
11 </page>
12 </script>

  顺便给出Company.xsl文件代码:

  Company.xsl:

1 <?xml version="1.0" encoding="utf-8"?>
2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3 <xsl:template match="/Company">
4 <div>
5 Company:
6 <xsl:value-of select="Name" />
7 </div>
8 <xsl:for-each select="Employees/Employee">
9 <div>
10 <xsl:value-of select="Name" />
11 <xsl:text>, </xsl:text>
12 <xsl:value-of select="Age" />
13 <xsl:text> years old.</xsl:text>
14 </div>
15 </xsl:for-each>
16 </xsl:template>
17 </xsl:stylesheet>

  然后是Javascript代码,大部分与上例相同,只作了少量注释:

  Javascript代码:

1 <script language="javascript">
2 var empArray = new Array();
3
4 function addEmployee()
5 {
6 var emp = new Object();
7 emp.Name = $('empName').value;
8 emp.Age = parseInt($("empAge").value, 10);
9
10 empArray.push(emp);
11 updateSource();
12 }
13
14 function updateSource()
15 {
16 var html = "";
17
18 for (var i = 0; i < empArray.length; i++)
19 {
20 var emp = empArray[i];
21 html += ((i + 1) + ". " + emp.Name + ", " + emp.Age + " years old.<br />")
22 }
23
24 $("employees").innerHTML = html;
25 }
26
27 function serialize()
28 {
29 // 构造一个Company对象作为参数,
30 // 结构和服务器端对象相同。
31 var company = new Object();
32 company.Name = $("companyName").value;
33 company.Employees = empArray;
34
35 var params = { "company" : company }
36 var method = new Sys.Net.ServiceMethod("ComplexTypeWS.asmx", "GetXmlSerializedCompany", null);
37
38 method.invoke(params, onMethodComplete);
39 }
40
41 function onMethodComplete(resultXml, response, userContext)
42 {
43 // 这时第一个参数是一个Xml,
44 // 用它来设置XSLTView的document属性。
45 $("xmlDisplay").control.set_document(resultXml);
46
47 empArray.length = 0;
48 updateSource();
49 }
50 </script>

  代码就是这些,接下来看一下使用。首先依旧是添加数个Employee:


  填写Company Name并点击“Serialize!”按钮,可以看到下方的XSLT输出:


  使用Fiddler查看的Request Body和Response Body的信息:


  正如我们所期望的那样,Response Body里的信息是Company对象被Xml序列化之后的结果,然后使用XSLT转换后即得到了我们需要的信息!

  通过了上面两个例子,我们可以看出Atlas对于Web Services的支持是非常灵活的。具体的使用方式让开发人员有很大的发挥空间,开发人员完全可以选择合适的方式把Atlas灵活运用在自己的项目中。

  当然,Atlas对于Web Services的支持还远不止这些,在以后的文章里我会继续从实现角度对Atlas的Web Services进行分析,并提供更多的范例给大家参考。希望大家支持我的“深入Atlas系列”,谢谢大家。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

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

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