ASP.NET Web Service如何工作(3)

[日期:2003-06-26] 来源:CSDN  作者:sunnyzhao(翻译) [字体:大 中 小]

为了使.asmx句柄有可能反串行化SOAP头,首先你需要定义一个.NET类,它代表了暗含的XML Schema类。在此例中相应的类如下:

然后你需要在WebMethod类中定义一个成员变量来控制一个头类的实例,同样要为WebMethods标记[SoapHeader]属性。见如下:

这样,在WebMethod中你可以访问Token域,并提取SOAP头提供的信息。你也可以使用同样的技术将头信息送回客户端——你需要在[SoapHeader]属性声明中指定头的方向。

.asmx句柄也提供了.NET异常的自动串行化。任何被.asmx句柄劫获的未处理的异常都会被自动串行化为应答消息中的SOAP Fault元素。比如,在前面的例子中,假如用户名与反转的口令不匹配,我们的代码将会抛出一个.NET异常。.asmx句柄劫获这个异常,将它串行化为下面的SOAP应答:


如果你想更多的控制SOAP Fault元素,也可以通过指定所有SOAP Fault元素细节来明确抛出一个SOAP异常对象。比如:faultcode, faulstring, faultactor, detail元素。


领会WebMethods如何工作需要理解根本的串行化引擎和它的各种选项。串行化引擎的好处就是它隐藏了定制句柄中底层的XML API代码。然而尽管许多开发人员认为这样很好,一些人也认为这也是它的缺陷,因为他们想亲手来处理WebMethod中未经加工的SOAP消息。


自动生成WSDL文档


写好并部署了一个WebMethod后,客户需要明确知道和它成功通信SOAP消息应该是个什么样子。提供Web服务描述的标准方法是通过WSDL(和嵌入的XSD定义)。.asmx句柄自动的生成了人性化的可读文档和WSDL定义,它准确的反映了WebMethod接口。如果在你的WebMethods中应用了一些映射属性,它们将都被反映在生成的文档中。


假如你浏览这个.asmx文件,你将看到一个人性化的可读文档页面就像图2中显示的那样。这个文档页是由DefaultWsdlHelpGenerator.aspx (在 C:\windows\Microsoft.NET\Framework\v1.0.3705\config中)生成的。打开这个文件你会看到它就是一个标准的ASP.NET页面,它使用.NET reflection生成那个文档。这个特点使文档一直与代码同步,可以通过简单的修改这个文件来定制你的生成文档。


也可以在Web.config文件中指定一个不同的文档文件来绕过基于虚拟目录文档生成器:




如果客户端发出请求.asmx终点,且请求字符串后加“?wsdl”,.asmx句柄将生成一个WSDL定义而不是一个人性化的可读文档。客户端可以使用WSDL定义生成代理类,它自动的知道怎样和Web服务通信。

要定制WSDL生成过程,你可以写一个SoapExtensionReflector类并在你的Web.config文件中注册到WebMethods框架。然后当.asmx句柄生成WSDL定义时,它将会调用你的反映类(reflector)使你有机会定制提供给用户的最后定义。


同样你也可以采用两种技术来绕过WSDL生成过程。首先,可以在你的虚拟目录下提供一个静态的WSDL文档供客户访问,然后从Web.config文件中除去文档生成器(如下所示)。




另外一个比较自动化的技术是使用[WebServiceBinding]属性来指定WebMethod类实现的静态WSDL文档在虚拟目录中的位置,也要用[SoapDocumentMethod]属性为每一个实现的WebMethod指定WSDL绑定的名字。这样做以后,自动WSDL生成过程将会导入你的静态WSDL文件,生成一个新的服务描述。

手工编写WSDL是极端困难的,因为现在没有很多WSDL编辑器。因此自动文档/WSDL生成是WebMethod框架中有价值的一部分。没有它,许多开发者的日子会很难过的。


总结


ASP.NET WebMethods框架为创建WEB服务提供了高效的方法。WebMethods使得传统的.NET方法能够成为支持HTTP、XML、XML Schema和WSDL的Web服务操作。WebMethod(.asmx)句柄自动决定怎样将到来的SOAP请求消息分派到适当的方法,然后又将请求消息中的XML元素串行化为相应的.NET对象。为简化集成客户端,.asmx句柄也支持可读文档和WSDL的生成。


和自己定制的IhttpHandlers相比,尽管WebMethods框架有点受限,它还是提供了称为SOAP扩展框架的强大扩展模型。SOAP扩展允许你引入我们上面没有讨论到的额外功能来满足你的具体需要。比如,微软发布了Web Serivices Enhancements1.0,它提供了SoapExtension类,为WebMethods框架引入了几个GXA规范的支持。




</soap:Envelope>

ASP.NET Web Service如何工作(3)的更多相关文章

  1. ASP.NET Web Service如何工作(2)

    ASP.NET Web Service如何工作(2) [日期:2003-06-26] 来源:CSDN  作者:sunnyzhao(翻译) [字体:大 中 小] HTTP管道一旦调用了.asmx句柄,便 ...

  2. ASP.NET Web Service如何工作(1)

    ASP.NET Web Service如何工作(1) [日期:2003-06-26] 来源:CSDN  作者:sunnyzhao(翻译) [字体:大 中 小] Summary ASP.NET Web ...

  3. 【转载】在 Visual Studio 2012 中创建 ASP.Net Web Service

    在 Visual Studio 2012 中创建 ASP.Net Web Service,步骤非常简单.如下: 第一步:创建一个“ASP.Net Empty Web Application”项目 创建 ...

  4. Visual Studio 2010中创建ASP.Net Web Service

    转自:http://blog.csdn.net/xinyaping/article/details/7331375 很多人在论坛里说,在Visual Studio 2010中不能创建“ASP.Net ...

  5. 在 Visual Studio 2010 中创建 ASP.Net Web Service

    第一步:创建一个“ASP.Net Empty Web Application”项目 第二步:在项目中添加“Web Service”新项目 第一步之后,Visual Studio 2010会创建一个仅含 ...

  6. (转)在 Visual Studio 2010 中创建 ASP.Net Web Service

    很多人在论坛里说,在Visual Studio 2010中不能创建“ASP.Net Web Service”这种project了,下面跟帖者云云,有的说这是因为微软已经将Web Service整合进W ...

  7. ASP.NET Web Service中使用Session 及 Session丢失解决方法 续

    原文:ASP.NET Web Service中使用Session 及 Session丢失解决方法 续 1.关于Session丢失问题的说明汇总,参考这里 2.在Web Servcie中使用Sessio ...

  8. 微软实战训练营(X)重点班第(1)课:SOA必备知识之ASP.NET Web Service开发实战

    微软实战训练营 上海交大(A)实验班.(X)重点班 内部课程资料 链接:http://pan.baidu.com/s/1jGsTjq2 password:0wmf <微软实战训练营(X)重点班第 ...

  9. ASP.NET WEB SERVICE 创建、部署与使用

    PS: 开发工具 VS2010, 所有工程都为Debug状态,本人刚接触 Web Service,此文为菜鸟入门用例,高手勿笑! 转载请注明出处 :http://www.cnblogs.com/yyc ...

随机推荐

  1. Android实例-自定义程序名称、图标、全屏和可旋转方向(XE8+小米2)

    1.自定义程序名称Project->Options->Version Info->label(改成需要显示的中文名即可) ,但是需要安装到安卓手机才可以显示. 2.全屏显示Proje ...

  2. hdoj 1162 Eddy's picture

    并查集+最小生成树 Eddy's picture Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  3. BAT及各大互联网公司2014前端笔试面试题:JavaScript篇

    前面几题是会很基础,越下越有深度. 初级Javascript: 1.JavaScript是一门什么样的语言,它有哪些特点? 没有标准答案. 2.JavaScript的数据类型都有什么? 基本数据类型: ...

  4. 有return的情况下try catch finally的执行顺序(最有说服力的总结)

    结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...

  5. 如何在线缩小jpg图片的大小

    直接使用在线PS保存成更小格式,即可! 在线PS网址:http://www.webps.cn/ 打开图片 点击保存 直接拖动滑动条就可以改变图片大小

  6. 模板 树链剖分BFS版本

    //点和线段树都从1开始 //边使用vector vector<int> G[maxn]; ],num[maxn],iii[maxn],b[maxn],a[maxn],top[maxn], ...

  7. Aizu 2302 On or Off dfs/贪心

    On or Off Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.act ...

  8. uva 624 CD 01背包打印路径

    // 集训最终開始了.来到水题先 #include <cstdio> #include <cstring> #include <algorithm> #includ ...

  9. EXE文件结构及读取方法

    一.EXE文件概念 EXE File英文全名executable file ,译作可运行文件,可移植可运行 (PE) 文件格式的文件,它能够载入到内存中,并由操作系统载入程序运行.是可在操作系统存储空 ...

  10. C#系列之String和StringBuilder

    前言 首先和博园的各位打声招呼,小弟在博园呆了也有一年多了.平常一有时间就会过来看看文章,学习各位的经验,现在养成了一种一天不来博园,心里就不踏实的习惯,不知道在看我博文的大哥们有没有这个感觉. 读归 ...