博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 动态调用.net编写的webservices接口
阅读量:5036 次
发布时间:2019-06-12

本文共 4576 字,大约阅读时间需要 15 分钟。

 

创建类WebServiceHelper:

public class WebServiceHelper    {        #region 动态调用WebService动态调用地址        /// < summary>                   /// 动态调用web服务                 /// < /summary>                  /// < param name="url">WSDL服务地址< /param>         /// < param name="methodname">方法名< /param>                   /// < param name="args">参数< /param>                   /// < returns>< /returns>                  public static object InvokeWebService(string url, string methodname, object[] args)        {            return WebServiceHelper.InvokeWebService(url, null, methodname, args);        }       ///        /// 动态调用web服务       ///         /// WSDL服务地址       /// 服务接口类名        /// 方法名       /// 参数值       /// 
public static object InvokeWebService(string url, string classname, string methodname, object[]args) { string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling"; if ((classname == null) || (classname == "")) { classname = WebServiceHelper.GetWsClassName(url); } try { //获取WSDL WebClient wc = new WebClient(); Stream stream = wc.OpenRead(url + "?WSDL"); ServiceDescription sd = ServiceDescription.Read(stream); //注意classname一定要赋值获取 classname = sd.Services[0].Name; ServiceDescriptionImporter sdi = new ServiceDescriptionImporter(); sdi.AddServiceDescription(sd, "", ""); CodeNamespace cn = new CodeNamespace(@namespace); //生成客户端代理类代码 CodeCompileUnit ccu = new CodeCompileUnit(); ccu.Namespaces.Add(cn); sdi.Import(cn, ccu); CSharpCodeProvider icc = new CSharpCodeProvider(); //设定编译参数 CompilerParameters cplist = new CompilerParameters(); cplist.GenerateExecutable = false; cplist.GenerateInMemory = true; cplist.ReferencedAssemblies.Add("System.dll"); cplist.ReferencedAssemblies.Add("System.XML.dll"); cplist.ReferencedAssemblies.Add("System.Web.Services.dll"); cplist.ReferencedAssemblies.Add("System.Data.dll"); //编译代理类 CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu); if (true == cr.Errors.HasErrors) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors) { sb.Append(ce.ToString()); sb.Append(System.Environment.NewLine); } throw new Exception(sb.ToString()); } //生成代理实例,并调用方法 System.Reflection.Assembly assembly = cr.CompiledAssembly; Type t = assembly.GetType(@namespace + "." + classname, true, true); object obj = Activator.CreateInstance(t); System.Reflection.MethodInfo mi = t.GetMethod(methodname); return mi.Invoke(obj, args); } catch (Exception ex) { throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace)); // return "Error:WebService调用错误!" + ex.Message; } } private static string GetWsClassName(string wsUrl) { string[] parts = wsUrl.Split('/'); string[] pps = parts[parts.Length - 1].Split('.'); return pps[0]; } #endregion }}

 

1
  

 调用操作:

///          /// 调用操作          ///         ///         ///         private void button1_Click(object sender, EventArgs e)        {
#region 动态调用 webservices地址 try { object[] args = new object[3]; args[0] = ("参数一"); args[1] = ("参数二"); args[2] = ("参数三"); object result = WebServiceHelper.InvokeWebService("http://112.160.100.110:8000/Service1.asmx", "服务方法:send_message", args); string message = result.ToString(); } catch { } #endregion }

 原文地址:http://www.cnblogs.com/Warmsunshine/p/3813551.html

 

转载于:https://www.cnblogs.com/yuntianming/p/5724712.html

你可能感兴趣的文章
PHP 微信错误状态返回码说明
查看>>
【4.1】Python中的序列分类
查看>>
ubuntu 移动文件
查看>>
Easy Mock
查看>>
看看 Delphi XE2 为 VCL 提供的 14 种样式
查看>>
Python内置函数(29)——help
查看>>
机器学习系列-tensorflow-01-急切执行API
查看>>
SqlServer 遍历修改字段长度
查看>>
Eclipse快捷键:同时显示两个一模一样的代码窗口
查看>>
《架构之美》阅读笔记05
查看>>
《大道至简》读后感——论沟通的重要性
查看>>
JDBC基础篇(MYSQL)——使用statement执行DQL语句(select)
查看>>
关于React中props与state的一知半解
查看>>
java中Hashtable和HashMap的区别(转)
查看>>
关闭数据库
查看>>
webStrom智能提示忽略首字母大小写问题
查看>>
层叠加的五条叠加法则(一)
查看>>
设计模式六大原则(5):迪米特法则
查看>>
对Feature的操作插入添加删除
查看>>
javascript String
查看>>