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

动态调用webSerivce-简易方法的更多相关文章

  1. 动态调用WebService 通用方法Moss 中 传统开发中都可用。

    WebService是啥大家都知道了,这里不做过多的解释.通常我们使用WebService的做法基本都是在我们的项目中添加Web引用的方式,首先找到WebService的地址,然后定义命名空间,这样会 ...

  2. Java动态调用类中方法

    在Java中,调用类的方法有两种方式:对于静态方法可以直接使用类名调用,对于非静态方法必须使用类的对象调用.反射机制提供了比较另类的调用方式,可以根据需要指定要调用的方法,而不必在编程时确定.调用的方 ...

  3. rutime中动态调用类的方法

    Dynamically invoke a class method in Objective C 代码 #import <Foundation/Foundation.h> #import ...

  4. python 动态调用模块&类&方法

    转载自:http://www.cnblogs.com/bluefrog/archive/2012/05/11/2496439.html 一直想知道python里有没有类似php中的 $classnam ...

  5. 采用异步来实现重新连接服务器或者重新启动服务 C#中类的属性的获取 SignalR2简易数据看板演示 C#动态调用泛型类、泛型方法 asp .net core Get raw request. 从壹开始前后端分离[.NetCore 不定期更新] 38 ║自动初始化数据库

    采用异步来实现重新连接服务器或者重新启动服务 开启异步监听,不会导致主线程的堵塞,在服务异常断开后一直检测重新连接服务,成功连接服务后通知各个注册的客户端! #region 检测断线并重连OPC服务 ...

  6. Struts2动态调用DMI及错误解决方法

    在Strust2中action可以定义自己的方法,调用方法有两种方式,一种方式是struts.xml中指定method来表示需要用到的方法, 但是这种方法缺点在于如果你的Action中有很多方法则要多 ...

  7. js 动态调用字符串方法并传入对应参数

    在项目应用中,经常会需要根据业务数据需要动态去拼凑字符串,然后将字符串作为js代码进行执行. js提供eval()来支持.这里分享一个调用函数并传入需要参数的一个方法demo //动态调用自定义js方 ...

  8. C# 通过Get、Post、Soap调用WebService的方法

    实现代码来源于网络,我只是作了一些修改! using System; using System.Web; using System.Xml; using System.Collections; usi ...

  9. C#动态引用DLL的方法

    C#编程中,使用dll调用是经常的事,这样做的好处是非常多的,比如把某些功能封装到一个dll中,然后主程序动态调用这个dll. 废话不多说,举例说明如下. 首先,我们需要封装一个dll,vs2008下 ...

随机推荐

  1. const不同位置带来的区别

    const不同位置带来的区别 今天同学问我数据结构时,我对以下代码懵了一下: template <class T> class Link{ public: T data; Link< ...

  2. LeetCode | 136. 只出现一次的数字Ⅰ Ⅱ

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...

  3. mpvue小程序开发

    查阅资料,看官方文档,知道mpvue是一个使用 Vue.js 开发小程序的前端框架(美团的开源项目).框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compi ...

  4. 计算机网络篇,基于UDP、TCP的应用层及其端口

  5. flask入门 之 Python Shell (三)

    1.代码: #encoding:utf-8 from flask_sqlalchemy import SQLAlchemy from flask_script import Manager,Shell ...

  6. Linux 磁盘管理篇(一 磁盘分区)

    显示系统所有分区内容            fdisk 分区工具                parted fdisk: 执行完后按下 q 是退出不保存操作的意思 执行完后按下 w 是执行操作的意思 ...

  7. Jquery 搜索等待用户输入完成时自动执行

    $('#fuzzySearchBox').on('keyup', function (event) { var searchStr = $(this).val().toLowerCase(); //i ...

  8. vue项目中使用bpmn-流程图预览篇

    前情提要 上文已经实现了节点操作的前进.后退.导入.导出等操作,今日来实现“流程图预览”,以及视图的放大缩小 前提:项目安装过bpmn,安装可见上篇文章 实现要点 bpmn提供了两个神器:Modele ...

  9. not found 什么时候触发

    eq: BEGIN        DECLARE EXIT HANDLER FOR NOT FOUND SET o_state = 999;         select count(1) into ...

  10. Apache SkyWalking

    Apache SkyWalking 什么是 SkyWalking SkyWalking 是观察性分析平台和应用性能管理系统. 提供分布式追踪.服务网格遥测分析.度量聚合和可视化一体化解决方案. 支持J ...