.NET中使用WebService,以及和一般处理程序、类库的区别
首先我们来看一下如何创建Web Service
首先在解决方案中新建项,选择ASP.NETWeb应用程序
然后选择一个空的项目就可以,单击确定
项目建完之后,在项目上右键-->添加-->新建项,选择 Web服务(ASMX),添加
如果想要添加新的函数,必须在函数上方打上WebMethod标签
接下来就是调用,首先在我们项目的引用中,右键-->添加服务引用
单击发现
选择要添加的asmx文件,下面的命名空间也可以修改,然后点击确定,如果出现下面的弹框,添加失败的话,生成-->重新生成解决方案 然后在次添加就好了
添加完成之后,该项目中会出现一个ConnectedService,打开之后会出现引用的Service服务
然后在程序中就可以使用了,使用之前先添加命名空间,using 项目名称.刚才设置的命名空间,例如:
调用
//使用using释放资源 //实例化DateTimeServiceSoapClient对象,该对象的类型是WebService中的类型加上SoapClient using (DateTimeServiceSoapClient client = new DateTimeServiceSoapClient()) { //打开 client.Open(); //调用方法,接收返回值 DateTime dt = client.GetDateTimeNow(); //显示 Console.WriteLine(dt);
}
如果更新WebService中的函数的主体,重新生成之后,调用的话是不需要做出任何改变的
如果WebService中添加了新的函数,先重新生成解决方案,然后要右键服务引用-->更新服务引用即可
WebService的用法给我的第一感觉就是和类库并没有太大的区别,都是添加引用,调用方法。可是实际上内部的原理确是天差地别。
WebService使用的是soap协议进行通讯,本质上还是使用http请求进行通讯,通过http请求发送soap格式的xml文件,服务器会对xml文件进行解析,然后服务器端返回的也是soap格式的xml文件,然后客户端进行解析。
然后我们来看一下没有被解析过的HTTP POST协议返回的xml文件是什么样子的,右键asmx文件,单击在浏览器中进行查看
点开我们刚才写的这个方法
点击调用
这个就是HTTP POST请求返回的格式
而添加普通引用的话,实际上会在bin目录下将所引用程序的dll文件复制过来,如果项目不在同一个解决方案,被引用的项目有改动的话,还需要把dll文件再次复制一份放到bin目录下,是非常麻烦的。
WebService从执行的流程上来看,和ajax+一般处理程序差不多,都是请求然后处理请求。就我个人而言,WebService用于后端操作较为方便,因为操作都是封装好的,不需要自己创建HttpWebRequest对象发送请求,也不需要对返回的xml文件进行解码;而一般处理程序和ajax使用,用来处理前台发送来的数据更为方便。个人见解,如果大家有其他想法的话,可以多多发言