这样引用服务虽然方便,但是却没有这么灵活,而且如果你的项目部署在Linux下面的话,可能会遇到很多奇奇怪怪的问题,诸如什么强弱类型转换啊,什么dll无法加载之类的。那么除了引用这种方法外,还有什么方法可以调用webservice呢?实际上方法有很多,例如soap,get,post,代理类等等,当然,get和post方法需要webservice开放了这些功能才可以使用,如果限制了就没有办法了。今天,我们就来演示另外代理类调用webservice的方法,这种方法的好处就是直接把服务生成了本地cs代码,自己可以对cs里面的代码进行删减,把没用的,多余的代码都可以删掉。下面我们正式开始:
1、首先我们先建一个测试的webservice
2、将这个webservice发布到服务器上
发布后的地址是:http://vps.7var.com:81/test.asmx(当然,这个地址只是我演示的时候可用,后期我可能就删掉了,想测试的朋友们自己搭建服务器吧,本地的就可以了,不一定要发布到网上)
3、将webservice保存为.wsdl文件
用IE打开webservice的地址,然后在后面加上?wsdl,比如我上面这个地址变成了http://vps.7var.com:81/test.asmx?wsdl
然后在菜单栏-->文件-->另存为-->将页面保存为.wsdl文件,比如我这里保存到D:\test.wsdl
4、用wsdl命令将webservice生成代理类
在visual studio的安装目录或者开始菜单中,找到visual studio 开发人员命令提示(不一定叫这个名字,像VS2010就叫Visual Studio 命令提示(2010)),反正差不多就是这样的名字的了。或者你也可以直接在VS的安装目录下搜索wsdl.exe的路径,然后直接用。
打开命令提示窗口后,我们输入wsdl d:\test.wsdl /out:d:/test.cs(注意这里的格式/out:,还有后面注意指定路径,这样.cs文件才会在你指定的地方生成),按下回车键后,在d盘就多了一个test.cs文件
打开test.cs文件可以看到如下内容
这个就是由wsdl生成的代理类,我们只要把这个类放到项目中,直接调用这个类里面的方法,就如同调用webservice里面的方法一样了。是不是感觉方便多了?
如果你懒得把webservice保存成.wsdl文件也可以,我们可以直接在使用wsdl命令的时候,指定webservice的地址,同样可以生成cs文件,如下图
同样可以生成.cs代理类,这种方法更加快捷,省去了用IE保存文件的步骤。
5、测试代理类
下面我们新建一个C# WinForm项目来测试生成的代理类,将刚刚生成的test.cs类文件添加到我们的项目中。
在窗体中添加一个按钮,并编写代码如下:
编译运行,发现报错了~
这是因为代理类里面引用了System.Web.Services,所以我们只要把这个玩意加进来即可。选中项目,点击鼠标右键,添加引用,在左上角选择程序集-->框架,然后在右边列表中找到System.Web.Services,然后打勾,确定即可。
引用添加进来之后,我们再次编译运行,成功~按下按钮,弹出提示Hello World
本次代理类调用成功。方法是不是很简单?虽然感觉上比引用服务要麻烦点(因为要生成cs文件,实际也并不麻烦,1分钟都不用就能完成的事情),但是用代理类这种方法的好处就是,你可以对test.cs进行任意修改,当然前提是你能看懂里面的代码,知道哪些可以改,哪些不能改。
今天的教程就到这里~
ok
mjj通道