`

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

阅读更多

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服务时,有时我们希望限制通信协议仅使用SOAP,以提高安全性和互操作性。默认情况下,ASP.NET允许HTTP/POST、HTTP/GET和SOAP三种协议。HTTP/GET的安全性相对较弱,因为其数据可见且容易被滥用,...

    ASP.NET开发平台

    ASP.NET开发平台是微软公司推出的一种用于构建动态网站、Web应用程序和Web服务的框架。它建立在.NET Framework之上,提供了一整套工具和服务,帮助开发者更高效地构建、测试和部署高质量的Web应用。 首先,ASP.NET...

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

    本压缩包包含的是一些ASP.NET的Web开发源代码实例,非常适合初学者学习和掌握基础的开发技巧。 首先,"常用控件的用法"是ASP.NET Web开发中的核心部分。ASP.NET提供了大量的服务器控件,如Label(标签)、TextBox...

    asp.net开发手册(chm)

    本ASP.NET开发手册将详细讲解以上各个知识点,并提供实践示例,帮助读者从基础到进阶,全面掌握ASP.NET的开发技巧。无论你是刚开始接触Web开发的新手,还是寻求提升的开发者,这都将是一份宝贵的参考资料。

    asp.net开发常用文档

    ASP.NET是一种由微软公司开发的服务器端Web应用程序框架,用于构建...总之,“asp.net开发常用文档”涵盖了从基础到高级的ASP.NET开发知识,无论你是新手还是有经验的开发者,都可以从中受益,提升你的Web开发技能。

    ASP.NET+Web+API设计(美)布洛克著

    通过阅读《ASP.NET+Web+API设计》,读者不仅能够掌握ASP.NET Web API的开发技巧,还能了解到RESTful服务设计的最佳实践,从而提升自己在构建现代Web服务领域的专业素养。配合“完整清晰版_ASP.NET WebAPI设计.pdf”...

    优秀程序员之路——ASP.NET开发经验及技巧大汇总

    在这个“优秀程序员之路——ASP.NET开发经验及技巧大汇总”中,我们将深入探讨ASP.NET的核心概念、开发实践以及各种实用技巧,帮助你提升编程技能,成为一名出色的开发者。 首先,ASP.NET的基础知识是必不可少的。...

    Web程序设计-ASP.NET使用网站开发源代码

    本资源包含了《Web程序设计-ASP.NET 使用网站开发》第二版的源代码,涵盖了从基础到高级的各种ASP.NET开发主题。 1. **Web开发技术概述 (ch01 Web开发技术概述.ppt)** - 这一部分可能介绍了Web发展的历史,包括CGI...

    ASP.NET开发典型模块大全:ASP.NET开发典型模块大全.iso

    本资源"ASP.NET开发典型模块大全"是一个全面的教程集合,旨在帮助开发者深入理解和掌握ASP.NET的各种核心概念和技术。 1. **基础概念**: - ASP.NET架构:了解ASP.NET的基础结构,包括页面生命周期、事件处理模型...

    使用ASP.NET技术开发网上书店(ASP.NET)

    另一种在ASP.NET中开发Web应用的方式是使用Web Forms,它提供了丰富的服务器控件和事件处理机制,适合快速开发和传统的Windows编程风格。 4. **数据访问技术**: 开发网上书店,数据库管理是关键。ASP.NET可以与...

    asp.net开发技术大全_附带光盘

    C#是ASP.NET的主要编程语言,它的简洁性和面向对象特性使得在ASP.NET开发中非常受欢迎。 ASP.NET开发技术大全涵盖了许多关键知识点,以下将对这些内容进行详细阐述: 1. **ASP.NET架构**:ASP.NET基于HTTP协议,...

    asp.net web api pdf

    ASP.NET Web API是微软开发的一个用于构建RESTful服务的框架,它基于ASP.NET技术栈,广泛应用于构建Web应用程序和服务,尤其是对于移动应用、浏览器插件和服务器端数据交互。本教程《ASP.NET Web API设计》深入浅出...

    ASP.NET与Web Service实例剖析中文版(PPT)

    ASP.NET和Web Service是...它将帮助你理解这两种技术的核心原理,提高开发Web应用程序和服务的能力,并提供实际操作的指导。通过这份PPT,你可以系统地学习和实践,从而在.NET平台上构建出高效、可靠的Web解决方案。

    ASP.NET 4.0 网站开发与项目实战 光盘

    ASP.NET 4.0 是微软开发的一个强大的Web应用程序框架,用于构建动态、数据驱动的网站和应用程序。这个框架是.NET Framework的一部分,提供了丰富的特性和工具,使得开发者能够更高效地构建高质量的Web应用。 在...

    ASP.NET文件参考 asp.net asp.net技巧

    ASP.NET是微软公司开发的一种用于构建动态网站、Web应用程序和Web服务的技术,它基于.NET Framework,为开发者提供了强大而高效的应用程序开发环境。...理解并掌握这些知识点,对于提升ASP.NET开发技能至关重要。

    ASP.NET开发技术大全.pdf

    ASP.NET是微软公司推出的用于构建Web应用程序的框架,它基于.NET ...通过阅读《ASP.NET开发技术大全》,读者可以期望获得全面的ASP.NET开发技能,从基础概念到高级特性的运用,从而提升Web应用开发的专业水平。

    ASP.Net 开发宝典 代码第三部分

    《ASP.Net开发宝典》是针对ASP.Net技术的深度学习资料,主要涵盖了从基础到高级的各类开发知识。代码第三部分包含26至32章的内容,这些章节着重讲解了ASP.Net开发中的关键技术和实践应用,是提升开发者技能的重要...

    ASP.NET与Web Service实例剖析中文版

    ASP.NET和Web Service是微软开发的两种核心技术,用于构建高效、可扩展的互联网应用程序和服务。在本书《ASP.NET与Web Service实例剖析中文版》中,读者可以深入理解这两种技术的原理及其实际应用。 ASP.NET是.NET...

Global site tag (gtag.js) - Google Analytics