zoukankan      html  css  js  c++  java
  • C# .Net动态调用webService

    http://www.cnblogs.com/xffy1028/archive/2012/05/07/2487595.html

    C# .Net动态调用webService

     
    复制代码
    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();

  • 相关阅读:
    什么是ORM
    ORM优缺点
    Azure 中快速搭建 FTPS 服务
    连接到 Azure 上的 SQL Server 虚拟机(经典部署)
    在 Azure 虚拟机中配置 Always On 可用性组(经典)
    SQL Server 2014 虚拟机的自动备份 (Resource Manager)
    Azure 虚拟机上的 SQL Server 常见问题
    排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
    上传通用化 VHD 并使用它在 Azure 中创建新 VM
    排查在 Azure 中新建 Windows VM 时遇到的部署问题
  • 原文地址:https://www.cnblogs.com/zhangxz/p/2934513.html
Copyright © 2011-2022 走看看