zoukankan      html  css  js  c++  java
  • .Net动态调用webservice

    C# .Net动态调用webService实现思路及代码

    作者:

    动态调用web服务将执行以下步骤:获取WSDL/生成客户端代理类代码/设定编译参数/编译代理类/生成代理实例,并调用方法,很详细的,感兴趣的你可不要错过了哈

    using System; 

    using System.Collections.Generic; 

    using System.Linq; 

    using System.Web; 

    using System.Net; 

    using System.IO; 

    using System.Web.Services.Description; 

    using System.CodeDom; 

    using Microsoft.CSharp; 

    using System.CodeDom.Compiler; 

    using System.Reflection; 

    namespace HTTPS 

    public class WSHelper 

    /// < 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 WSHelper.InvokeWebService(url, null, methodname, args); 

    /// < summary> 

    /// 动态调用web服务 

    /// < /summary> 

    /// < param name="url">WSDL服务地址< /param> 

    /// < param name="classname">类名< /param> 

    /// < param name="methodname">方法名< /param> 

    /// < param name="args">参数< /param> 

    /// < returns>< /returns> 

    public static object InvokeWebService(string url, string classname, string methodname, object[] args) 

    string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling"; 

    if ((classname == null) || (classname == "")) 

    classname = WSHelper.GetWsClassName(url); 

    try 

    { //获取WSDL 

    WebClient wc = new WebClient(); 

    Stream stream = wc.OpenRead(url + "?WSDL"); 

    ServiceDescription sd = ServiceDescription.Read(stream); 

    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); 

    // PropertyInfo propertyInfo = type.GetProperty(propertyname); 

    //return propertyInfo.GetValue(obj, null); 

    catch (Exception ex) 

    throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace)); 

    private static string GetWsClassName(string wsUrl) 

    string[] parts = wsUrl.Split('/'); 

    string[] pps = parts[parts.Length - 1].Split('.'); 

    return pps[0]; 

    调用 

    string url = "http://webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx"; 

    string[] args = new string[2]; 

    args[0] = "k123"; 

    args[1] = ""; 

    object result = WSHelper.InvokeWebService(url, "getDetailInfoByTrainCode", args); 

    DataSet ds = (DataSet)result; 

    this.GridView1.DataSource = ds; 

    this.GridView1.DataBind();

  • 相关阅读:
    挖矿病毒 netstat与ss重要区别
    leetcode 正则表达式匹配
    DNS重新绑定攻击
    Mac OS ssh 禁用密码登陆
    linux alias 别名在Bash脚本内不起作用 远程执行alias 命令不工作
    centos 7 搭建 l2tp
    psacct 软件包工具监视所有用户执行的命令
    随机密码生成
    Linux 进程 cpu 使用排序 内存 使用排序
    nginx 反向代理 uri 重写
  • 原文地址:https://www.cnblogs.com/mr-lee1976/p/4654609.html
Copyright © 2011-2022 走看看