动态调用webSerivce-简易方法

简介:
     大家对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,如需转载请自行联系原作者

相关文章
|
6月前
|
安全 Java
JAVA反射调用方法
JAVA反射调用方法
|
7月前
调用反射类的指定方法
调用反射类的指定方法
|
7月前
调用反射类的方法
调用反射类的方法
|
Java API
Java反射(通过反射获取构造函数、方法、属性)
1.通过反射获取构造函数,2.通过反射获取方法,3.通过反射调用成员属性
119 0
|
C++
同样一句代码,在类内调用,跟类外调用结果不同?
同样一句代码,在类内调用,跟类外调用结果不同?
80 0
java反射构建对象和方法的反射调用
java反射构建对象和方法的反射调用Java反射技术应用广泛,其能够配置:类的全限定名,方法和参数,完成对象的初始化,设置是反射某些方法。可以增强java的可配置性。 1.1 通过反射构建对象(无参数):   例如我们使用 ReflectServiceImpl 类讲解这个例子 1 public class ReflectServiceImpl {2 public void sayHello(String name){3 System.out.println("hello"+name);4 }5 }我们通过反射的方法去构建它。
872 0
如何通过反射调用对象的方法?
import java.lang.reflect.Method; class MethodInvokeTest { public static void main(String[] args) throws Exception { ...
1120 0
|
Java Spring
接口动态调用
spring配置文件配置 调用方法 private ServiceOutput doClazzByBeanName(String beanName, ServiceInput input) throws ServiceException { ServiceOutput output = .
1608 0