当下web横行的年代,为满足不同的业务需求使用不同的技术,甚至语言可谓是屡见不鲜,究其原因还是那句话:没有最好的技术,只有最符合的技术,一切都是为了业务服务。那么在编程语言不同的情况下,传递数据成了一个项目中难以解决的问题,于是SOA技术就此诞生。
SOA :面向服务编程,严格来讲, SOA 应该算的上是一种程序架构的方法,也可以说的上是一种思想。究其产生的原因,主要就是项目中的模块越来越多,但是模块和模块之间存在语言冲突,没有办法完成很好的交互,于是 SOA 应运而生。
那么在c#中常用的解决交互问题的方法都有什么呢,当然不仅仅是 Web Service 一种,除了 Web Service 之外,还有 WCF 以及 WebAPI 。本章就单纯的讲一讲Web Service的使用。
Web Service:既然是存在交互问题,那么肯定就是有个平台,那么首先我们先打开两个 vs2017 。并建立程序,命名为 MyWebTest 的 MVC 项目,在 MyWebTest 中新建文件夹 WebService,我们被调用的方法就要写在这里边。并在里边新建一个web服务项目(asmx)
接下来我们看一下生成的asmx文件里边到底有什么
很简洁,只有一个叫 [ WebMethod ] 的特性。接下来我们手动添加一个方法
然后我们尝试打开这个页面
可以看到,我们写在程序的方法在页面中是有显示的,我们可以看一下,此时点击调用会出错,因为我们能建立的是 MVC 项目,而 MVC 项目是使用路由控制跳转地址的,所以我们需要在路由里边进行一下修改
这样就可以运行并调用成功了。接下来我们打开另一个vs2017平台,建立一个项目,我建立的单元测试项目,也可以建立别的项目。起名为WebServiceTest。
我们可以看到,在自动生成的 UnitTest 中自动填充了部分代码,其中 [ TestClass ] 特性标记的是类,表示这是一个测试类, [ TestMethod ] 标记的是方法,值得一提的是如果不使用该特性标记某方法的话,那么在测试调试的时候是找不到那个方法的。接下来,就是需要将刚刚写好的 Web Service 引用到这个测试类中。
然后我们就可以在测试类中使用发布在服务器上的方法了。
在这里解释一下断言,断言是测试类里边特有的封装方法,是为了满足测试的时候当出现又返回结果但是返回结果与预期不符的时候测试不能成功而出现的方法,比如上图。在断言里边调用add方法传入1和2,得到的应该是3,此时与后面的结果是一致的,那么这个测试方法就是可以通过的,否则是不能通过的。
最后我们再来说一说 Web Service 的权限认证问题,其实一般在 Web Service 中我们是不考虑权限问题的,因为基本都是企业内部的使用,但是当下的时代,安全是最重要的,所以为了以防万一,我们还是说一说权限的问题,在 Web Service 中权限认证是可以通过Soap协议的Header来实现的。具体实现方式如下:
1.首先建立一个实体类,用来盛放用户验证信息的,注意,这个实体类一定要继承自SoapHeader
2.接下来我们在代码里进行一些修改
这下我们在运行一下add方法试试,
可以看到,得到的结果并不是3而是-1,这说明用户权限的校验已经生效了。接下来我们试一试远程调用的时候用户权限校验是否可用
我们直接看断言的结果:
从结果上看,我们已经成功了,i 得到了想要的3,用户验证的权限问题也完成了。
以上就是对 Web Service 的基本应用,学到新东西之后会持续更新。