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

转载 2011年05月13日 10:06:00

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

 

一、禁用HTTP POST/GET协议

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

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

  **webservices
  **protocols
  **remove name="HttpPost" /
  **remove name="HttpGet" /
  **/protocols
  **/webservices

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

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

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

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

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

    tcpTrace(www.pocketsoap.com/tcptrace)是一个查看这类消息交换过程的优秀工具,它通过设置一个客户端和服务器端之间的隧道工作。启动tcpTrace时,它会要求输入目标URL和端口号,以及tcpTrace监听的本地端口号。这样,你就可以通过设置代理stubUrl属性,把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;
  }
  }
  }

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

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

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

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

    CookieHTTP独有的。在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。...
  • u014660355
  • u014660355
  • 2014年04月19日 18:03
  • 385

【Web API系列教程】1.1 — ASP.NET Web API入门

前言HTTP不仅仅服务于web页面,同时也是构建暴露服务和数据的API的强大平台。HTTP有着简单、灵活和无处不在的特点。你能想到的几乎所有平台都包含有一个HTTP库,所以HTTP服务可以遍及广泛的客...
  • NoMasp
  • NoMasp
  • 2016年02月24日 18:48
  • 10223

移动端web开发技巧汇总

移动端web开发技巧汇总与经验分享,已经涵盖了web移动端开发的方方面面,web移动端开发不可多得的干货,值得一看。 META相关 1. 添加到主屏后的标题(IOS) ...
  • longzs
  • longzs
  • 2016年03月03日 11:38
  • 1282

做个高效率的程序猿,使用VS内置的ASP.NET Web 服务器调试

前言:上周出差支持二次开发, 发现二开现场开发环境用的是IIS进行开发和调试,重启IIS服务器成本很大,而且本人的是超级本只装了VS没装数据库和产品。按二开他们目前的模式, 把Cloud产品+VS开...
  • H_lanhai
  • H_lanhai
  • 2016年01月05日 17:13
  • 2304

ASP.NET Web开发技术的深入总结

【IT168技术】在国内.Net开发这个环境里, 中小型公司,或者大公司但主营业务不是软件开发里面的软件小团队,针对.Net开发人员的要求都是十项全能型的全才, 能做的了从前台页面展现到最后数据存储的...
  • SJian123
  • SJian123
  • 2014年09月02日 16:01
  • 1182

通过一个天气预报案例学习asp.net WebService(基于asp.net MVC)

本文WebService数据来源:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 中国气象局 http://www.cma...
  • dotNET25
  • dotNET25
  • 2013年06月08日 15:30
  • 4161

asp.net web开发所用到的技术

基本要求 1. 熟悉一种语言的编程模型(3中程序执行顺序, 相关基本类型, 事件机制,反射机制, 函数变量作用域, 线程)   技术进阶: 2. 事件导向思维(UI的操作与有些逻辑需要事件, ...
  • u012441545
  • u012441545
  • 2016年06月13日 20:28
  • 1328

ASP.NET中的WebService一个简单的例子

一、WebService:WebService是以独立于平台的方式,通过标准的Web协议,可以由程序访问的应用程序逻辑单元。 (1)应用程序逻辑单元:web服务包括一些应用程序逻辑单元或者代码。...
  • a6225301
  • a6225301
  • 2014年10月16日 14:37
  • 7923

装修公司网站源码模板电脑、手机端、微信三合一Asp.net

QQ:251908419 演示地址 http://shj.coseo.cn/ 手机端地址 http://mshj.coseo.cn/ 后台地址 http://shj.coseo...
  • WW11963526
  • WW11963526
  • 2016年06月08日 10:09
  • 211

通过ASP.NET Web API + JQuery创建一个简单的Web应用

看了dudu的《HttpClient + ASP.NET Web API, WCF之外的另一个选择》一文,想起多很久之前体现ASP.NET Web API而创建的一个Demo。这是一个只涉及到简单...
  • linshichen
  • linshichen
  • 2016年05月09日 13:52
  • 295
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET开发Web服务的五则技巧
举报原因:
原因补充:

(最多只允许输入30个字)