欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > 网站制作教程 >

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

发表于2019-04-23 20:03| 次阅读| 来源网络整理| 作者session

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

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

  一、禁用HTTPPOST/GET协定
  
  除非另外指定,否则,.NET将试图把Web服务绑定到三种协定:HTTP/POST、HTTP/GET和SOAP。之所以说“试图”,是由于依赖于服务的参数和前往类型,HTTP/GET协定能够不可用。.NET生成的WSDL文件将主动蕴含绑定这三种协定的指令,客户程序可能自由抉择利用哪种协定与服务通讯。
  
  只需在Web.config文件中退出下列内容,就可能方便地删除对HTTP/POST和HTTP/GET协定的绑定:
  
  为什么要避免经过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服务运用的人来说,调试能够是件与众不同的难事,由于无论是.NETSDK还是VS.NET,都没有提供工具来查看客户端和服务器之间的SOAP消息。
  
  假设.NET和非.NET的客户端、服务器端的交互过程出现了成绩,要想找出成绩的根源,领有查看SOAP消息的才能就尤为重要,由于这类成绩往往与SOAP消息的格式无关(例如,“消息中蕴含了SOAPAction吗?”)。
  
  tcpTrace()是一个查看这类消息替换过程的优良工具,它经过设置一个客户端和服务器端之间的隧道工作。启动tcpTrace时,它会要求输入指标URL和端口号,以及tcpTrace监听的本地端口号。这样,你就可能经过设置代理stub的Url属性,把stub指向这个本地端口(例如,localhost:8080)。tcpTrace可以记载一切的申请和应对HTTP消息。
  
  tcpTrace的一个局限是,它在消息流程中所处的地位决议了它不能用来查看经过SSL发送的消息。假设你要查看经过SSL发送的SOAP消息,只能编写一个定制的ISAPI过滤器。
  
  三、简化接口设计
  
  在泛滥无关n-层运用设计的阐述中,简化接口设计这一设计要诀可能说是随处可见。然而,对于Web服务这样的散布式计算环境,简化接口设计的重要性愈加突出。
  
  在设计散布式运用时,出于功能和可伸缩性的思考,该当保证客户端和服务器端之间的调用尽能够地少。缩小网络调用不只要利于缩小通讯开支(假设只用一个SOAP消息可能达到指标,就绝对不要发三个消息),升高网络流量,而且提高了运用的功能。显然,这所有都是开发者朝思暮想的指标。那么简化的接口到底有何特色呢?
  
  首先来看一个简单接口的例子:
  
  namespaceChattyService{
  
  publicclassChattyService:WebService{
  
  privatestringusername;
  
  privatestringpassword;
  
  publicstringUsername{
  
  [WebMethod]
  
  set{
  
  username=Username;
  
  }}
  
  publicstringPassword{
  
  [WebMethod]
  
  set{
  
  password=Password;
  
  }}
  
  [WebMethod]
  
  publicboolLogon(){
  
  //验证身份
  
  returntrue;
  
  }
  
  }
  
  }
  
  在这个例子中,username和password是两个属性,调用logon()方法之前首先必须设置这两个属性。有一个成绩光看这段代码不太容易留意到,这就是username和password都作为Web方法引出。这就是说,每次对属性的get/set操作都会导致一个对服务的调用。
  
  依照简化接口设计的要求,改进后的代码如下:
  
  namespaceChattyService{
  
  publicclassChattyService:WebService{
  
  [WebMethod]
  
  publicboolLogon(stringUsername,stringPassword){
  
  //验证身份
  
  returntrue;
  
  }
  
  }
  
  }
  
  如今,username和password成了logon()方法的参数。修正之后的代码的优点在于,它把登录操作对服务器的三次调用升高到了一次。另一方面,假设参数的个数太多,这个方法能够看起来很不像样。这时,能够要把方法的参数整顿成几个简单类型,例如,把username和password两个参数封装到一个credential(证书)对象里面。
  
  四、在Web.Config中保存运用公有的数据
  
  用ASP.NET开发的Web服务可以施展出.aspx运用的一切特长,包括用web.config文件保存运用公有数据的才能(例如,数据库衔接字符串、文件门路等)。用Web.config而不是global.asax文件的益处在于修正配置之后不必重新结构运用。
  
  五、避免利用ASP.NET会话形状
  
  .NET完成的会话形状治感性能处理了它的长辈ASP3.0存在的许多成绩,例如申请串行化等,但仍存在一些局限。该当意识到,.NET的会话形状治感性能不是专门为Web服务环境中的会话形状而设计,而是为了在范围更宽泛的ASP.NET运用中治理会话形状而设计,它依赖于HTTPCookie(有一种经过改写URL完成的不需求Cookie的形式,但不实用于Web服务)。
  
  Cookie是HTTP独有的。在Web上,一切的阅读器都支持HTTP,所以Cookie十分适宜在Web运用中利用。然而,在Web服务中运用Cookie却把服务限定到了HTTP协定上。另一方面,SOAP协定的运转是独立于传输协定的,因此假设把Web服务运用限度到HTTP协定上,运用的灵敏性也遭到了限度,一旦要经过非HTTP的传输协定(例如SMTP)提供服务,事件会变得很费事。