您的位置:首页 > 编程语言 > ASP

asp.net 动态调用webservice方法

2017-08-07 15:16 357 查看
假设我们现在已经有一个做好的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的调用,在这里顺便记录了具体的使用方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  asp.net web service