• C#动态调用WebService


              

    /// <summary>
    /// 动态调用web服务
    /// </summary>
    /// <param name="url">url</param>
    /// <param name="methodname">方法</param>
    /// <param name="args">参数</param>
    /// <returns>object基类对象</returns>
    public static object InvokeWebService(string url, string methodname, object[] args)
    {
    object result = null;
    if (string.IsNullOrWhiteSpace(url))
    return result;
    try
    {
    System.Net.WebClient wc = new System.Net.WebClient();
    System.IO.Stream stream = wc.OpenRead(url);

    System.Web.Services.Description.ServiceDescription sd = System.Web.Services.Description.ServiceDescription.Read(stream);
    string className = sd.Services[0].Name;
    System.Web.Services.Description.ServiceDescriptionImporter sdi = new System.Web.Services.Description.ServiceDescriptionImporter();
    sdi.AddServiceDescription(sd, "", "");
    System.CodeDom.CodeNamespace cn = new System.CodeDom.CodeNamespace("");
    System.CodeDom.CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit();
    ccu.Namespaces.Add(cn);
    sdi.Import(cn, ccu);

    System.CodeDom.Compiler.CompilerParameters cplist = new System.CodeDom.Compiler.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");

    System.CodeDom.Compiler.CodeDomProvider provider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp");
    System.CodeDom.Compiler.CompilerResults cr = provider.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(className, true, true);

    object obj = Activator.CreateInstance(t);
    System.Reflection.MethodInfo mi = t.GetMethod(methodname);
    result = mi.Invoke(obj, args);
    }
    catch (Exception ex)
    {
    result = null;
    System.Windows.Forms.MessageBox.Show(ex.Message + " " + ex.StackTrace);
    }
    return result;
    }

  • 相关阅读:
    Android布局控件
    XAMPP里tomcat启动报错:Make sure you have Java JDK or JRE installed and the required ports are free
    poj 北京大学 2014研究生推免上机考试(校内)
    2014北大计算机学科保研直博夏令营上机poj考试
    《C++Primer》第四版学习笔记--持续更新中
    poj1986:Distance Queries
    poj2533:最长上升子序列
    poj1062:昂贵的聘礼
    黑书贪心例题之钓鱼 poj1042:Gone Fishing
    转:最小没出现的整数
  • 原文地址:https://www.cnblogs.com/txsblog/p/14137007.html
Copyright © 2020-2023  润新知