asp.net 动态调用webservice方法

来源:互联网 发布:农村淘宝官网电话 编辑:程序博客网 时间:2024/06/02 02:37

假设我们现在已经有一个做好的webservice方法:

 [WebMethod(Description = "获取分包商进场计划信息明细(根据时间范围)")]        public string getSubcontractorPlanList(string SubcontractorAccount,string  StartDate, string EndDate)        {            string returnString = "abc";            return returnString;        }

那么我们如何来调用这个方法呢,有两种方式,一种是通过c#后台调用,一种是通过jquery的ajax方式调用。以下是具体的调用方法:

① 创建一个调用webservice的代理类:

using System;using System.Collections.Generic;using System.Text;using System.Xml;using System.Net;using System.Web.Services.Description;using System.CodeDom;using System.CodeDom.Compiler;using System.Reflection;namespace WebApplication1{    public class WebServiceAgent    {        private object agent;        private Type agentType;        private const string CODE_NAMESPACE = "Beyondbit.WebServiceAgent.Dynamic";        /// <summary<        /// 构造函数        /// </summary<        /// <param name="url"<</param<        public WebServiceAgent()        {            string url = "http://xx.com/AppService/abc.asmx";            XmlTextReader reader = new XmlTextReader(url + "?wsdl");            //创建和格式化 WSDL 文档            ServiceDescription sd = ServiceDescription.Read(reader);            //创建客户端代理代理类            ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();            sdi.AddServiceDescription(sd, null, null);            //使用 CodeDom 编译客户端代理类            CodeNamespace cn = new CodeNamespace(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);        }        public MethodInfo[] Methods        {            get            {                return agentType.GetMethods();            }        }    }}

②,创建一个调用webservice 的页面:GetWebServiceFunc.aspx
,在其后台代码中,增加一个方法:

[WebMethod]        public static string Invoke(string MethodName,string ObjStr)        {            object[] args = null;            string[] arr = ObjStr.Split(new string[] { ";#" }, StringSplitOptions.None);            if (arr != null && arr.Length > 0)            {                args = new object[arr.Length-1];                for (int i = 0; i < arr.Length-1; i++)                {                    string value = Convert.ToString(arr[i]);                    if (value == "null")                    {                        args[i] = "";                    }                    else                    {                        args[i] = value;                    }                }            }            return Convert.ToString(new WebServiceAgent().Invoke(MethodName, args));        }

接下来,我们就可以通过以下方式,来调用这个方法了,第一种是通过c#后端程序来调用。

WebServiceAgent agent = new WebServiceAgent();            object[] args = new object[3];            args[0] = "csfbs";            args[1] = "2017-07-01";            args[2] = "";            string text = agent.Invoke("getSubcontractorPlanList", args).ToString();

另一种,是通过jquery的ajax来调用:

<script src="./js/jquery-1.9.1.min.js"></script>   <script>       $(document).ready(function () {           $.ajax({               type: "Post",               //方法所在页面和方法名                                    url: "GetWebServiceFunc.aspx/Invoke",               data: "{'MethodName':'getSubcontractorPlanList','ObjStr':'csfbs;#2017-07-01;#null;#'}",               contentType: "application/json; charset=utf-8",               dataType: "json",               success: function (data) {                   //返回的数据用data.d获取内容                                             alert(data.d);               },               error: function (err) {                   alert('fail');               }           });       });   </script>

通过以上程序,我们就实现了对webservice的调用,在这里顺便记录了具体的使用方法。

原创粉丝点击