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