【摘自互联网】
调用
其中webservice为一天气查询方法。。。。
另可将url写入XML文件中,直接读取,这样以防webservice地址经常改动。
存放web地址的XML文件可写成
获取代码的方法如下:
Code
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Xml;
using System.Net;
using System.Web.Services.Description;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Reflection;
/// <summary>
/// WebServiceAgent 的摘要说明
/// </summary>
public class WebServiceAgent
{
public WebServiceAgent()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private object agent;
private Type agentType;
private const string CODE_NAMESPACE = "Beyondbit.WebServiceAgent.Dynamic";
/// <summary>
/// 构造函数
/// </summary>
/// <param name="url"></param>
public WebServiceAgent(string url)
{
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();
}
}
}
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Xml;
using System.Net;
using System.Web.Services.Description;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Reflection;
/// <summary>
/// WebServiceAgent 的摘要说明
/// </summary>
public class WebServiceAgent
{
public WebServiceAgent()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private object agent;
private Type agentType;
private const string CODE_NAMESPACE = "Beyondbit.WebServiceAgent.Dynamic";
/// <summary>
/// 构造函数
/// </summary>
/// <param name="url"></param>
public WebServiceAgent(string url)
{
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();
}
}
}
调用
Code
string url = "http://www.webservicex.net/globalweather.asmx" ;
string[] args = new string[2] ;
args[0]="Beijing";
args[1] = "China" ;
WebServiceAgent ww = new WebServiceAgent(url);
Response.Write(Convert.ToString(ww.Invoke("GetWeather",args)));
string url = "http://www.webservicex.net/globalweather.asmx" ;
string[] args = new string[2] ;
args[0]="Beijing";
args[1] = "China" ;
WebServiceAgent ww = new WebServiceAgent(url);
Response.Write(Convert.ToString(ww.Invoke("GetWeather",args)));
其中webservice为一天气查询方法。。。。
另可将url写入XML文件中,直接读取,这样以防webservice地址经常改动。
存放web地址的XML文件可写成
Code
<?xml version="1.0" encoding="utf-8" ?>
<Webservice>
<add key="eip" value="http://eip.ypc.com.cn:9080/userweb/services/UserService" />
<add key="weather" value="http://www.webservicex.net/globalweather.asmx"/>
</Webservice>
<?xml version="1.0" encoding="utf-8" ?>
<Webservice>
<add key="eip" value="http://eip.ypc.com.cn:9080/userweb/services/UserService" />
<add key="weather" value="http://www.webservicex.net/globalweather.asmx"/>
</Webservice>
获取代码的方法如下:
Code
protected string getUrl(string strkey)
{
XmlDocument myXmlDocument = new XmlDocument();
//myXmlDocument.Load("d:\\cec\\aa.xml");
//myXmlDocument.Load(AppDomain.CurrentDomain.BaseDirectory+"App_Data\\aa.xml");
myXmlDocument.Load(HttpContext.Current.Server.MapPath("App_data") + "\\aa.xml");
foreach (XmlNode myNode in myXmlDocument["Webservice"])
{
if (myNode.Name == "add")
{
if (myNode.Attributes.GetNamedItem("key").Value == strkey)
{
return myNode.Attributes.GetNamedItem("value").Value;
}
}
}
return null;
}
protected string getUrl(string strkey)
{
XmlDocument myXmlDocument = new XmlDocument();
//myXmlDocument.Load("d:\\cec\\aa.xml");
//myXmlDocument.Load(AppDomain.CurrentDomain.BaseDirectory+"App_Data\\aa.xml");
myXmlDocument.Load(HttpContext.Current.Server.MapPath("App_data") + "\\aa.xml");
foreach (XmlNode myNode in myXmlDocument["Webservice"])
{
if (myNode.Name == "add")
{
if (myNode.Attributes.GetNamedItem("key").Value == strkey)
{
return myNode.Attributes.GetNamedItem("value").Value;
}
}
}
return null;
}