范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

C动态调用WebService

  一、前言
  在工作中要切换多个环境的WebService地址,如果使用静态引用会导致无法切换环境地址,从而通过动态调用的方式解决该问题。,如果涉及到与第三方进行接口对接,有的会使用WebService的方式,这篇文章主要讲解在.NET Framework中如何调用WebService。首先我们创建一个WebService,里面有两个方法:一个无参的方法,一个有参的方法:
  创建好了WebService以后,把WebService部署到IIS上,并确保可以访问
  二、静态引用
  这种方式是通过添加静态引用的方式调用WebService。首先创建一个Winform程序,界面上有一个按钮,点击按钮调用WebService:
  然后添加静态引用。在要调用WebService的项目上选择引用,然后右键选择"添加服务引用",如下图所示:
  然后输入IIS上部署的WebService地址:
  最后点击"确定"按钮即可完成静态引用WebService,添加完成以后的项目结构如下图所示:
  添加完引用以后,就可以编写代码了:
  ///
  /// 静态调用WebService
  /// 
  /// 
  /// 
  private void btn_Static_Click(object sender, EventArgs e)
  {
  // 实例化类
  CallWebService.TestWebSoapClient client = new CallWebService.TestWebSoapClient();
  // 调用无参的HelloWorld方法
  string value1= client.HelloWorld();
  // 调用有参的方法
  string value2 = client.Test("有参方法");
  // 输出
  MessageBox.Show(#34;无参方法返回值:{value1},有参方法返回值:{value2}");
  }
  运行程序测试:
  这样就可以实现调用WebService了。
  三、动态调用
  上面我们说了如何使用静态引用的方式调用WebService,但是这种方式有一个缺点:如果发布的WebService地址改变,那么就要重新添加WebService的引用。如果是现有的WebService发生了改变,也要更新现有的服务引用,这需要把代码放到现场才可以。那么有没有什么方式可以解决这种问题呢?那就是使用动态调用WebService的方法。
  我们在配置文件里面添加配置,把WebService的地址、WebService提供的类名、要调用的方法名称,都写在配置文件里面:
  
  在界面上添加一个按钮,点击按钮可以动态调用WebService,新建一个帮助类:
  using System;
  using System.CodeDom;
  using System.CodeDom.Compiler;
  using System.IO;
  using System.Net;
  using System.Text;
  using System.Web;
  using System.Web.Caching;
  using System.Web.Services.Description;
  using System.Xml.Serialization;
  namespace WebServiceDemo
  {
  public class WebServiceHelper
  {
  ///
  /// 生成dll文件保存到本地
  /// 
  /// WebService地址
  /// 类名
  /// 方法名
  /// 保存dll文件的路径
  public static void CreateWebServiceDLL(string url,string className, string methodName,string filePath )
  {
  // 1. 使用 WebClient 下载 WSDL 信息。
  WebClient web = new WebClient();
  Stream stream = web.OpenRead(url + "?WSDL");
  // 2. 创建和格式化 WSDL 文档。
  ServiceDescription description = ServiceDescription.Read(stream);
  //如果不存在就创建file文件夹
  if (Directory.Exists(filePath) == false)
  {
  Directory.CreateDirectory(filePath);
  }
  if (File.Exists(filePath + className + "_" + methodName + ".dll"))
  {
  //判断缓存是否过期
  var cachevalue = HttpRuntime.Cache.Get(className + "_" + methodName);
  if (cachevalue == null)
  {
  //缓存过期删除dll
  File.Delete(filePath + className + "_" + methodName + ".dll");
  }
  else
  {
  // 如果缓存没有过期就直接返回
  return;
  }
  }
  // 3. 创建客户端代理代理类。
  ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
  // 指定访问协议。
  importer.ProtocolName = "Soap";
  // 生成客户端代理。
  importer.Style = ServiceDescriptionImportStyle.Client;
  importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;
  // 添加 WSDL 文档。
  importer.AddServiceDescription(description, null, null);
  // 4. 使用 CodeDom 编译客户端代理类。
  // 为代理类添加命名空间,缺省为全局空间。
  CodeNamespace nmspace = new CodeNamespace();
  CodeCompileUnit unit = new CodeCompileUnit();
  unit.Namespaces.Add(nmspace);
  ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);
  CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
  CompilerParameters parameter = new CompilerParameters();
  parameter.GenerateExecutable = false;
  // 可以指定你所需的任何文件名。
  parameter.OutputAssembly = filePath + className + "_" + methodName + ".dll";
  parameter.ReferencedAssemblies.Add("System.dll");
  parameter.ReferencedAssemblies.Add("System.XML.dll");
  parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
  parameter.ReferencedAssemblies.Add("System.Data.dll");
  // 生成dll文件,并会把WebService信息写入到dll里面
  CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);
  if (result.Errors.HasErrors)
  {
  // 显示编译错误信息
  System.Text.StringBuilder sb = new StringBuilder();
  foreach (CompilerError ce in result.Errors)
  {
  sb.Append(ce.ToString());
  sb.Append(System.Environment.NewLine);
  }
  throw new Exception(sb.ToString());
  }
  //记录缓存
  var objCache = HttpRuntime.Cache;
  // 缓存信息写入dll文件
  objCache.Insert(className + "_" + methodName, "1", null, DateTime.Now.AddMinutes(5), TimeSpan.Zero, CacheItemPriority.High, null);
  }
  }
  }
  动态调用WebService代码:
  ///
  /// 动态调用WebService
  /// 
  /// 
  /// 
  private void btn_Dynamic_Click(object sender, EventArgs e)
  {
  // 读取配置文件,获取配置信息
  string url = ConfigurationManager.AppSettings["WebServiceAddress"];
  string className = ConfigurationManager.AppSettings["ClassName"];
  string methodName = ConfigurationManager.AppSettings["MethodName"];
  string filePath = ConfigurationManager.AppSettings["FilePath"];
  // 调用WebServiceHelper
  WebServiceHelper.CreateWebServiceDLL(url, className, methodName, filePath);
  // 读取dll内容
  byte[] filedata = File.ReadAllBytes(filePath + className + "_" + methodName + ".dll");
  // 加载程序信息
  Assembly asm = Assembly.Load(filedata);
  Type t = asm.GetType(className);
  // 创建实例
  object o = Activator.CreateInstance(t);
  MethodInfo method = t.GetMethod(methodName);
  // 参数
  object[] args = {"动态调用WebService" };
  // 调用访问,获取方法返回值
  string value = method.Invoke(o, args).ToString();
  //输出返回值
  MessageBox.Show(#34;返回值:{value}");
  }
  程序运行结果:
  如果说类名没有提供,可以根据url来自动获取类名:
  ///
  /// 根据WebService的url地址获取className
  /// 
  /// WebService的url地址
  ///
  private string GetWsClassName(string wsUrl)
  {
  string[] parts = wsUrl.Split("/");
  string[] pps = parts[parts.Length - 1].Split(".");
  return pps[0];
  }

赴约天然氧吧,探寻本味桂东红网时刻新闻通讯员余翔黄敏艳郴州报道桂东县,隶属湖南省郴州市,位于湖南省东南边陲,罗霄山脉中段,湘江支流耒水上游,东与江西省上犹县崇义县遂川县为邻,南邻汝城县,西接资兴市,西北连株2022中国制造业企业500强发布中石化宝武钢铁五矿集团进前三2022年9月6日,中国企业联合会中国企业家协会(简称中国企联)在京举办新闻发布会,发布了2022中国制造业企业500强榜单。这是中国企联连续第18次向社会发布该榜单。01hr规模产业区块链驶入快车道,什么才是破局关键?最近火热的概念里,无论是元宇宙,还是Web3。0,虽然大家没有形成完全的共识,但有一点毋庸置疑,这些美好的未来都离不开区块链技术的支撑。经过前期的基础技术积淀和行业规范,区块链以其央视邢质斌28年0失误,退休后被疑晚节不保,她经历了什么邢质斌,作为央视第一代主持人,专业能力毋庸置疑,她的主持行云流水端庄大气气势磅礴,她是在新闻联播干得时间最长的一位主持人,工作28年零失误,是后辈们的榜样,深受全国人民的喜爱。然而乔丹儿子被爆和皮蓬前妻约会!皮蓬你真是生了个好大儿啊乔丹最近没有什么消息,但是他的儿子倒是被爆出惊人消息了!约会皮蓬前妻Larsa!这不得不说漂亮国的人是真会玩啊据报道,当天马库斯乔丹(乔丹的好大儿)和Larsa与另一对情侣在迈阿密23岁爆红,28岁被封杀,年近40口碑爆棚,他的翻红,狠狠打了内娱的脸没有流量明星的综艺会有观众吗?在往年,答案大概率是否定的。但是,自清朗行动展开后,各大综艺节目开始去流量化,综艺市场随之悄悄发生变化。结果,今年夏天最火的综艺快乐再出发没有一位流量戏精张庭小三公然挑衅正妻,抢人老公骗人钱财,现狼狈不堪1989年,林瑞阳和曾哲贞共同步入婚姻殿堂,男帅女靓是天造地设的一对,亲朋好友为俩人送上新婚祝福,白头偕老,早生贵子。不久后,曾哲贞为林瑞阳生下一儿一女,一家四口幸福美满,女儿双全庆余年2启动,言冰云林婉儿人选公布,观众好在还是你庆余年是2019年热播的一部由张若昀领衔主演的古装大男主剧,虽然该剧已经收官两年半,但是却一直在观众最喜欢的古装剧排行前十之列,其受欢迎程度可想而知。庆余年2启动,言冰云林婉儿人选S12世界赛比赛时间泄露?中国观众遭殃,凌晨3点和5点看比赛随着LPL冒泡赛的结束,本月底的S12世界赛也成为了大家关注的焦点赛事,因为今年世界赛在墨西哥和美国举办,所以对于LPL观众来说,将面临时差问题。而就在最近,有网友发现海外售票网站欧冠联赛凯尔特人vs皇家马德里阵容预测凯尔特人队和皇家马德里队将于周二(当地时间)在冠军联赛中相遇。当地时间周二晚上,当卫冕冠军皇家马德里队访问凯尔特人队时,两个欧洲巨人将在冠军联赛中发生碰撞。双方都以出色的状态进入了1699元起!iQOOZ6系列开售至今好评率高达99不久前,iQOO带来了旗下最新力作iQOOZ6系列。9月1日,iQOOZ6系列新品全渠道正式开售,首销就取得了多平台全价位段销量销售额双冠军的好成绩。9月6日,手机中国从iQOO官如今的明星,除了性别还有多少是真的?红楼梦里第一回就提到过假作真时真亦假,无为有时有还无。真真假假虚虚实实的不仅是曹雪芹笔下的大观园,也是这个真实的大千世界,尤其是光怪陆离的娱乐圈。但娱乐圈可没有红楼梦,有的只是假作太空旅游有多远?印度公司是这样设想的为世界重新构想印度的太空旅游,作为印度商业化太空服务公司的代表之一,SpaceAura正在展示印度最新的太空旅游大道。SpaceAura宣称其愿景是商业人类太空任务,以加速人类和印8小时5笔签约消息湖人旧将再就业,独行侠做出签约决定北京时间9月6日,虽然正值NBA休赛期,各球队依然没有放弃补强。为了迎接即将开始的训练营和季前赛,各球队都进行了最后的补强计划。随着越来越多的球员再就业,自由市也有球员至今因为各种得分第5抢断第1!湖人弃子爆发字母哥也吃瘪,佩总再召回他?乌克兰队又赢了。9月6日的欧洲杯小组赛,乌克兰84比73击败劲旅意大利,从而以3胜0负的战绩排名小组第一,力压希腊克罗地亚和意大利3支传统欧洲劲旅。乌克兰头号得分手是曾经效力湖人的索赔1000万!詹姆斯摊上事了,莫名其妙被告侵权最近,勒布朗詹姆斯正在处理自己的私事,因为洛杉矶湖人队的休赛期阵容调整还没结束,新赛季训练营也暂时还没开始。但是詹姆斯一点都不轻松,他除了要度假,要进行个人训练,要看儿子布朗尼的比每1000人只有0。7人做近视手术,A股眼科三巨头半年赚14亿本文来源时代财经作者文若楠图片来源图虫创意今年上半年,眼科赛道利好消息持续发布,前有国家卫健委印发十四五全国眼健康规划(20212025年),后有何氏眼科(301103。SZ)普瑞11户央企领导班子调整,涉及18人近日,国资委发布11户中央企业18名领导人员职务任免公告,涉及中国煤炭地质总局中国中煤能源集团等。中国煤炭地质总局贾春曲任中国煤炭地质总局党委书记副局长免去赵平的中国煤炭地质总局党先进工艺受阻砍单关停光刻机?外媒台积电大势已去在芯片这一冗长的产业链中,芯片制造无疑是众人关注的焦点。在全球芯片代工阵营中,台积电是行业内的翘楚,不管是产能还是工艺,与同行竞争对手相比都有一定的领先优势。虽然三星实现了3nm制资讯华为nova10z发布华为nova10z发布首发1599元8128GB1699元(首发1599元)8256GB1899元(首发1799元)疑似搭载海思麒麟710A处理器160。68mm73。3mm8。4王曼昱4冠?孙颖莎10冠?陈梦6冠?世界冠军到底怎么算?最近有网友说,王曼昱获得4座世界冠军,孙颖莎获得10座世界冠军,而陈梦只获得了6个世界冠军!今天,黑狸狸就帮大家盘点一下乒乓球赛事获得哪些赛事冠军,才能称得上是世界冠军!再和大家聊朱芳雨离婚被前妻发文怒斥,太花心出轨现在老婆,如今儿子不跟他近日广东男篮得到了许多媒体的关注,球队在休赛期失去了周鹏这位优秀的队长,不过好在朱芳雨总经理凭借着过人的口才和能力将赵睿成功留在广东队,保留了主体阵容,将有望在新赛季拥有更好的成绩
建设银行20万亿存款之道2020年建行吸收客户存款20。61万亿元。同比2019年增长12。24。同期内招行吸收客户存款5。3万亿元,建行的存款规模是招行的4倍。建行是怎么搞存款的?招商银行是零售之王,建大衣哥儿子定亲,新亲家母首次亮相就火了,是老实本分的同村人爱情是理想的一致,是意志的融合,而不是物质的代名词金钱的奴仆。谚语在爱情与婚姻的天平上,如果以物质或是利益作为砝码,那么幸福的平衡也就失去了。一对恋人选择步入婚姻的一百种理由中,唯爆红2年后跌落谷底,靠妻子和儿子炒作的张亮,还能走多远?前言近日,张亮的儿子天天(张悦轩)登上了热搜,起因是5月9日有人曝光了他和小女友的亲密照片,包括两人在教室里的亲昵照,以及在酒店吃饭的照片等等,算起来天天也才14岁,刚上初中就早恋大衣哥新儿媳陈萌二婚带娃,幼儿园保洁,网友难怪看得上朱小伟自从大衣哥的儿子朱小伟订婚到现在,他这位准儿媳妇陈萌可谓是一直饱受着大家的议论跟争议,包括陈萌的身份也被大家传的沸沸扬扬。有说她是毕业名牌大学,还有说后来她考了事业编,最后又成了一向佐发文庆祝儿子即将出生,期待与郭碧婷见面,正在办理返台手续近日,向太陈岚在参加晚会的同时突然向现场媒体官宣儿媳妇郭碧婷怀二胎的喜讯,一时间引发外界热议。据向太表示,郭碧婷已经怀孕将近有九个月左右的时间了,预产期是在下个月(六月份),并亲自大衣哥商演报价流出3首歌要价12万,网友难怪退圈说到大衣哥,相信很多人都非常熟悉,大衣哥是山东农村的一个农民,42岁那年,他因参加星光大道被观众熟知,成为了国内家喻户晓的草根明星,42岁之前,大衣哥一直在农村种地,生活的非常朴实交往15天就受邀去朱家住?大衣哥丑话说前头,领证前立下3条家规大衣哥作为农村出道的歌手来说,他的努力跟实力是全网有目共睹的,也是靠着自己朴实的性格受到了大家们的喜欢,就是这样一个老实本分的人因为家中的一些琐事,接二连三的登上热搜,也是人们闲暇爹打江山儿子玩,詹姆斯17岁的儿子为何只和白人女孩交往?17岁时你在干啥,同样都在上学,可人和人的差距就是如此之大,近日,詹姆斯的儿子布朗尼引起了球迷热议,事情是这样的,此前布朗尼参加学校舞会,行为举止异常高调,他穿着精致的礼服,全身上陈萌提出生娃要求,3个条件让大衣哥花100W,网友比陈亚男还狠相信网友们对陈萌这个名字并不陌生,其最近在网上非常火,她是朱小伟的未婚妻,同时也是朱之文的准儿媳。两个人已经正式订婚,用不了多长时间,就会正式举行婚礼。很多网友非常替朱小伟和朱之文NBA球星韦德晒全家福,儿子变姓后首次恋爱,拿出百万美金当嫁妆NBA明星韦德最近发布了一张家庭照片。韦德的两个儿子和前妻出生在这张照片中。更令人惊讶的是,在韦德的家庭照片中,除了他的长子和女朋友,他的第二个女儿扎亚也和他的男朋友一起出现了。韦一千人民币兑换五千泰铢,在泰国能得到什么待遇,泰国女孩告诉你旅游人气比较高的几个地区里,我相信打卡人数最多的就是东南亚,这里的异国风情最诱人,并且性价比也特别高,还有着十分丰富的旅游资源。(此处已添加小程序,请到今日头条客户端查看)最受中国