webservice的配置动态调用方法

来源:互联网 发布:zabbix监控windows 编辑:程序博客网 时间:2024/05/22 21:10

using System;

using System.Collections.Generic;

using System.Text;

using System.Xml;

using System.Web.Services.Description;

using System.CodeDom;

using System.CodeDom.Compiler;

using System.Reflection;

namespace PDBizTalkGetTargetAddress

{

   ///<summary>

   ///动态Web服务代理类

   ///</summary>

   ///<example>

   /// Agent agent = new Agent("http://sample.com/services/SampleService.asmx");

   ///</example>

   public class Agent

    {

       private object agent;

       private Type agentType;

       private const string CODE_NAMESPACE = "Beyondbit.WebServiceAgent.Dynamic";

       ///<summary>

       ///创建新的代理

       ///</summary>

       ///<param name="serviceUri">webserviced uri</param>

       public Agent(string serviceUri)

        {

           XmlTextReader reader = new XmlTextReader(serviceUri + "?wsdl");

           ServiceDescription sd = ServiceDescription.Read(reader);

           ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();

            sdi.AddServiceDescription(sd,null, null);

           CodeNamespace cn = newCodeNamespace(CODE_NAMESPACE);

           CodeCompileUnit ccu = new CodeCompileUnit();

            ccu.Namespaces.Add(cn);

            sdi.Import(cn, ccu);

            Microsoft.CSharp.CSharpCodeProvider icc =new Microsoft.CSharp.CSharpCodeProvider();

           CompilerParameters cp = new CompilerParameters();

           CompilerResults cr = icc.CompileAssemblyFromDom(cp, ccu);

            agentType = cr.CompiledAssembly.GetTypes()[0];

            agent =Activator.CreateInstance(agentType);

        }

       ///<summary>

       ///调用指定的方法

       ///</summary>

       ///<param name="methodName">方法名,大小写敏感</param>

       ///<param name="args">参数,按照参数顺序赋值</param>

       ///<returns>Web服务的返回值</returns>

       public object Invoke(string methodName,params object[] args)

        {

           MethodInfo mi = agentType.GetMethod(methodName);

           return this.Invoke(mi, args);

        }

       ///<summary>

       ///调用指定方法

       ///</summary>

       ///<param name="method">方法信息</param>

       ///<param name="args">参数,按照参数顺序赋值</param>

       ///<returns>Web服务的返回值</returns>

       public object Invoke(MethodInfo method,params object[] args)

        {

           return method.Invoke(agent, args);

        }

       ///<summary>

       ///调用指定的方法

       ///</summary>

       ///<param name="methodName">方法名,大小写敏感</param>

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

       ///<returns>Web服务的返回值</returns>

       public object Invoke(string methodName,object arg0)

        {

           MethodInfo mi = agentType.GetMethod(methodName);

           return this.Invoke(mi,new object[] { arg0 });

        }

       ///<summary>

       ///调用指定的方法

       ///</summary>

       ///<param name="methodName">方法名,大小写敏感</param>

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

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

       ///<returns>Web服务的返回值</returns>

       public object Invoke(string methodName,object arg0, object arg1)

        {

           MethodInfo mi = agentType.GetMethod(methodName);

           return this.Invoke(mi,new object[] { arg0, arg1 });

        }

       ///<summary>

       ///调用指定的方法

       ///</summary>

       ///<param name="methodName">方法名,大小写敏感</param>

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

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

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

       ///<returns>Web服务的返回值</returns>

       public object Invoke(string methodName,object arg0, object arg1,object arg2)

        {

           MethodInfo mi = agentType.GetMethod(methodName);

           return this.Invoke(mi,new object[] { arg0, arg1, arg2 });

        }

       ///<summary>

       ///调用指定的方法

       ///</summary>

       ///<param name="method">方法信息</param>

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

       ///<returns>Web服务的返回值</returns>

       public object Invoke(MethodInfo method,object arg0)

        {

           return this.Invoke(method,new object[] { arg0 });

        }

       ///<summary>

       ///调用指定的方法

       ///</summary>

       ///<param name="method">方法信息</param>

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

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

       ///<returns>Web服务的返回值</returns>

       public object Invoke(MethodInfo method,object arg0, object arg1)

        {

           return this.Invoke(method,new object[] { arg0, arg1 });

        }

       ///<summary>

       ///调用指定的方法

       ///</summary>

       ///<param name="method">方法信息</param>

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

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

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

       ///<returns>Web服务的返回值</returns>

       public object Invoke(MethodInfo method,object arg0, object arg1,object arg2)

        {

           return this.Invoke(method,new object[] { arg0, arg1, arg2 });

        }

       ///<summary>

       ///获取所有公共方法

       ///</summary>

       public MethodInfo[] Methods

        {

           get

            {

               return agentType.GetMethods();

            }

        }

    }

}

 

 

调用方法:
 public void sendStr(string message,string messs)
    {
            string SMWebserviceURL = System.Configuration.ConfigurationManager.AppSettings["URL"].ToString();
            Agent agent = new Agent(SMWebserviceURL);
            object[] Par = new object[8];
            Par[0] = message;
            Par[1] = messs;
            agent.Invoke("SendMessage", Par);
        }
    }

原创粉丝点击