大家对webservice已经不再陌生了,涉及到的通信大部分都是用webservice。不过我还是看好wcf,因为毕竟是微软推出的新技术,各个方面还是蛮不错的,特别是你可以利用多种通信方式,如果IIS-SERVICE是在intranet中,利用wcf的net绑定方式的效率是要高于webservice的,不过对于internet,那wcf可以利用ws方式,实现webserivce的通信。所以个人认为wcf还是发展趋势的产物。
在利用webservice时通常是添加web的引用,本文主要是讨论添加web引用时动态改变serviceIP的方法。当然利用webservice也是可以不添加引用的,不过需要用到反射,c#编译器,等等等等。。。效率相当慢,我这有源码,如果有兴趣我可以发给大家共同学习。
因为在添加webservice的时候是需要提供webservice的地址和端口号的,因为添加完的service地址是固定的(我本以为这样,其实从某种意义上说就是这样),所以从网上搜了好多资料,但是没有找到好的解决方案,最后发现在config文件中发现.net给加了一个配置项放在appsetting下,这对我们改变service的地址是很方便的,因为你在添加引用的时候,.net其实是将服务的地址写在配置文件中了,因此如果以后service的地址变了可以通过该配置项修改ip就可以了。不过这不是纯意义上的动态调用webservice,如果webserivce发布在多台机器上,你可以希望根据需要来选择需要连接的service,比如用户可以根据需要填写ip来调用服务,这时候就需要一个代理类。经查msdn了解到soapHttpClientProtocol类,他是继承自httpWebClientProtocol,httpWebClientProtocol继承自webClientProtocol,只要调用webserivce使用soap,那么代理类就需要继承自soapHttpClientProtocol类,这几个类的关系可以在msdn上找到,所以你可以新建一个代理类,该代理类继承自soapHttpClientProtocol,因为在父类webClientProtocol类中有个url属性,设置这个属性的值就可以动态改变你添加的ip了,不过建议最好继承你添加web引用的那个类,因为引用的类是继承自soapHttpClientProtocol的,所以如果你继承自引用的类,那就可以调用service中的所有方法了,而不需要msdn说的那样,需要为每个service中的方法再在代理类中写一遍,一切以方便为最终目标。通过这种方式就可以解决了,并且比编译时动态调用webservice的效率要高的多。如果可能,还是推荐大家使用wcf,因为wcf已经集成了webservice,使用也很方便。
本文转自lidup 51CTO博客,原文链接:http://blog.51cto.com/lidup/162598,如需转载请自行联系原作者