asp.net 动态调用webservice方法

假设我们现在已经有一个做好的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的调用,在这里顺便记录了具体的使用方法。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值