`
caozuiba
  • 浏览: 899552 次
文章分类
社区版块
存档分类
最新评论

用ASP.NET开发Web服务的五则技巧

 
阅读更多
一、禁用HTTP POST/GET协议

  除非另外指定,否则,.NET将试图把Web服务绑定到三种协议:HTTP/POST、HTTP/GET和SOAP。之所以说“试图”,是因为依赖于服务的参数和返回类型,HTTP/GET协议可能不可用。.NET生成的WSDL文件将自动包含绑定这三种协议的指令,客户程序可以自由选择使用哪种协议与服务通信。

  只要在Web.config文件中加入下列内容,就可以方便地删除对HTTP/POST和HTTP/GET协议的绑定:

<webservices>
<protocols>
<remove name="HttpPost" />
<remove name="HttpGet" />
</protocols>
</webservices>



  为什么要避免通过HTTP/POST和HTTP/GET协议引出Web服务呢?主要的两个原因是安全和互操作性。HTTP/GET的安全性不如SOAP,而且由于HTTP/GET常见于Web链接,怀有恶意的人可能利用它实施欺骗,使别人在不知不觉中用自己的安全标识调用Web服务,却还以为自己在点击Web链接。

  就互操作性而言,SOAP是广泛应用的Web服务通信标准,而HTTP/GET和HTTP/POST不是。因此,对于.NET生成的WSDL文档中默认包含的HTTP/GET和HTTP/POST绑定,许多自动生成代理服务器的工具不会理解。因此,如果你的Web服务不是非绑定到HTTP/GET和HTTP/POST协议不可,最好取消这两种绑定。



  二、用tcpTrace查看SOAP请求/应答消息

  对于开发Web服务应用的人来说,调试可能是件异乎寻常的难事,因为无论是.NET SDK还是VS.NET,都没有提供工具来查看客户端和服务器之间的SOAP消息。

  如果.NET和非.NET的客户端、服务器端的交互过程出现了问题,要想找出问题的根源,拥有查看SOAP消息的能力就尤为重要,因为这类问题往往与SOAP消息的格式有关(例如,“消息中包含了SOAPAction 吗?”)。

  tcpTrace(www.pocketsoap.com/tcptrace)是一个查看这类消息交换过程的优秀工具,它通过设置一个客户端和服务器端之间的隧道工作。启动tcpTrace时,它会要求输入目标URL和端口号,以及tcpTrace监听的本地端口号。这样,你就可以通过设置代理stub的Url属性,把stub指向这个本地端口(例如,localhost:8080)。tcpTrace能够记录所有的请求和应答HTTP消息。

  tcpTrace的一个局限是,它在消息流程中所处的位置决定了它不能用来查看通过SSL发送的消息。如果你要查看通过SSL发送的SOAP消息,只能编写一个定制的ISAPI过滤器。



  三、简化接口设计

  在众多有关n-层应用设计的论述中,简化接口设计这一设计要诀可以说是随处可见。但是,对于Web服务这样的分布式计算环境,简化接口设计的重要性更加突出。

  在设计分布式应用时,出于性能和可伸缩性的考虑,应当保证客户端和服务器端之间的调用尽可能地少。减少网络调用不仅有利于减少通信开销(如果只用一个SOAP消息可以达到目标,就绝对不要发三个消息),降低网络流量,而且提高了应用的性能。显然,这一切都是开发者梦寐以求的目标。那么简化的接口到底有何特征呢?

  首先来看一个复杂接口的例子:

namespace ChattyService {
public class ChattyService : WebService {
private string username;
private string password;

public string Username {
[WebMethod]
set {
username = Username;
} }

public string Password {
[WebMethod]
set {
password = Password;
} }

[WebMethod]
public bool Logon() {
// 验证身份
return true;
}
}
}



  在这个例子中,username和password是两个属性,调用logon()方法之前首先必须设置这两个属性。有一个问题光看这段代码不太容易注意到,这就是username和password都作为Web方法引出。这就是说,每次对属性的get/set操作都会导致一个对服务的调用。

  按照简化接口设计的要求,改进后的代码如下:

namespace ChattyService {
public class ChattyService : WebService {
[WebMethod]
public bool Logon(string Username, string Password) {
// 验证身份
return true;
}
}
}



  现在,username和password成了logon()方法的参数。修改之后的代码的优点在于,它把登录操作对服务器的三次调用降低到了一次。另一方面,如果参数的个数太多,这个方法可能看起来很不像样。这时,可能要把方法的参数整理成几个复杂类型,例如,把username和password两个参数封装到一个credential(证书)对象里面。



  四、在Web.Config中保存应用私有的数据

  用ASP.NET开发的Web服务能够发挥出.aspx应用的所有特长,包括用web.config文件保存应用私有数据的能力(例如,数据库连接字符串、文件路径等)。用Web.config而不是global.asax文件的好处在于修改配置之后不必重新构造应用。



  五、避免使用ASP.NET会话状态

  .NET实现的会话状态管理功能解决了它的前辈ASP 3.0存在的许多问题,例如请求串行化等,但仍存在一些局限。应当认识到,.NET的会话状态管理功能不是专门为Web服务环境中的会话状态而设计,而是为了在范围更广泛的ASP.NET应用中管理会话状态而设计,它依赖于HTTP Cookie(有一种通过改写URL实现的不需要Cookie的模式,但不适用于Web服务)。

  Cookie是HTTP独有的。在Web上,所有的浏览器都支持HTTP,所以Cookie非常适合在Web应用中使用。但是,在Web服务中应用Cookie却把服务限定到了HTTP协议上。另一方面,SOAP协议的运行是独立于传输协议的,因此如果把Web服务应用限制到HTTP协议上,应用的灵活性也受到了限制,一旦要通过非HTTP的传输协议(例如SMTP)提供服务,事情会变得很麻烦。
分享到:
评论

相关推荐

    ASP.NET开发Web服务的五则技巧

    ASP.NET开发Web服务的五则技巧  一、禁用HTTP POST/GET协议    除非另外指定,否则,.NET将试图把Web服务绑定到三种协议:HTTP/POST、HTTP/GET和SOAP。之所以说“试图”,是因为依赖于服务的参数和返回类型...

    一些ASP.NET的Web开发源代码小实例,初学者的常用技巧

    一些ASP.NET的Web开发源代码小实例。里边包含了一些常用控件的用法,基本的页面布局技巧,报表制作,页面间的跳转和参数传递等等。注释很详细。

    Web应用程序开发教程——ASP.NET+SQL Server 课件

    然后结合几个使用ASP.NET+SQL Server 2000开发Web应用程序的实例(包括用户登录和身份验证、文件上传、发送电子邮件、图文验证、在线教育系统、网上书城系统等),全面介绍了用ASP.NET和SQL Server 2000开发Web应用...

    ASP.NET开发实战1200例(第Ⅱ卷)源码

    《asp.net开发实战1200例》包括第i卷、第ii卷共计1200个例子,本书是第i卷,共计600个例子。 本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用asp.net进行程序开发的各种知识和技巧。...

    ASP.NET 2.0开发技术大全

    本书是一本ASP.NET 2.0 综合开发参考手册,书中几乎囊括了ASP.NET开发Web应用程序的全部知识,同时在讲解中结合了大量实用而又有代表性的示例和典型应用。全书共分37章,包括认识ASP.NET 2.0、ASP.NET 2.0网页语法、...

    ASP.NET网站开发典型模块与实例精讲 源码

    本书讲解了使用ASP.NET开发网站的经典模块和工程实例。全书的内容分为三部分,第一部分介绍ASP.NET的运行原理,开发运行环境的搭建及ASP.NET安全等开发必备的知识,并给出相关的学习建议;第二部分介绍使用ASP.NET...

    asp.net组件工具包vb.net web解决方案

    ASP.NET为广大.NET开发人员提供了一种优秀的体系结构,使他们可以通过模块组件来构建自己的Web站点。本书重点讲述了一系列可重用的ASP.NET组件,可以直接使用或经过少理修改后使用这些组件,从而为自己的ASP.NET Web...

    asp.net开发常用整理集合

     Asp.Net中WebServices的使用  Asp.net手动绑定数据(分页、编辑、删除、加控件等操作)  Asp.net中My97DatePicker4.2日期的使用  Asp.net中DataList控件添加删除  Asp.net获取请求的用户信息IP地址  获取...

    ASP.NET+SQL Server 数据库开发与实例 光盘

    .NET平台是Microsoft公司推出的一套开发框架和工具,ASP.NET依托.NET平台的强大功能,可以使用户轻松地实现Web应用...本书适用于具有一定Web应用程序开发基础、准备学习ASP.NET编程或希望提高ASP.NET编程技巧的读者。

    ASP.NET开发实战1200例(第2卷).part4

    《ASP.NET开发实战1200例(第2卷)》以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用ASP.NET进行程序开发各个方面的知识和技巧,主要包括网站开发常备技术、前端技术应用开发、操作Office...

    Asp.net和C#开发中的一些注意事项及小技巧

    Asp.net和C#开发中的一些注意事项及小技巧.doc

    21 天学通ASP.NET(包含源码)

    本书一共分为四篇,第一篇主要讲解了ASP.NE的入门基础知识,内容包括搭建ASP.NET开发环境、C#语言基础、面向对象的程序设计、ASP.NET内置对象、ASP.NET页面语法、ASP.NET站点设计和常用服务器控件。第二篇重点分析了...

    ASP.NET数据库管理系统开发实例导航 源代码

    信息管理系统是最为广泛开发和应用的,针对现有ASP.NET图书少有详细案例分析和设计的情况,本书安排了5个典型的ASP.NET开发的Web系统为案例,向读者剖析利用ASP.NET进行系统设计和开发上的特点、思路、方法和技巧,...

    ASP.NET开发实战1200例(第2卷).pdf.part3

    《ASP.NET开发实战1200例(第2卷)》以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用ASP.NET进行程序开发各个方面的知识和技巧,主要包括网站开发常备技术、前端技术应用开发、操作Office...

    ASP.NET网页设计

    全书主要介绍了ASP.NET应用程序基础、C#语言、Web页面设计基础、Web控件、ASP.NET内置对象等,在ASP.NET中使用XML,以SQLServer2005为基础进行ADO.NET数据库编程,使用用户控件、自定义控件,创建Web服务。...

    《asp.net夜话》非常棒的一本书

    本书是笔者对多年项目开发的总结,着重讲述如何利用ASP.NET开发出高效率和高安全性的Web应用程序,通过由浅入深、循序渐进的方式讲解在ASP.NET开发中涉及的方方面面。本书从ASP.NET的基础出发,在适当的地方加以延伸...

    ASP.NET开发实战1200例_第I卷(3部分).part1.rar

    然后从常用Web服务器控件、ASP.NET安全验证控件、数据绑定控件、Web用户控件和ASP.NET导航控件全面介绍了几乎所有ASP.NET控件应用,接着以AJAX无刷新技术及页面模板设计对ASP.NET客户端进行了详细介绍,最后以高效...

    ASP.NET学习大全

    ADO.NET在开发中的部分使用方法和技巧.txt ADO.NET中的视图和过滤器.doc ASP .NET - ArrayList对象.txt asp.net 2.0中TREEVIEW中动态增加结点.txt Asp.net 实现验证码功能的Web控件.txt asp.net常用的javascript经典...

Global site tag (gtag.js) - Google Analytics