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

C# 动态调用WebService, 不同结果返回值处理

2012-08-16 17:22 405 查看
asp.net中 正常的调用WebService的方法是添加web引用,但是当一些特殊情况就不是很适用了,如果webService的地址经常变化的话,每次都要重新引用编译程序是件很麻烦的事情。这里动态引用ws只需要配置一个地址就可以了。

在网上找到了许多的文章具体实现都是差不多的,基本都是同一段代码。

主要参考一下两边文章:

这个是介绍动态调用,主要用的是这哥们的代码:

/article/4246974.html

这个是介绍利用反射来获取返回的数组,虽然有个地方错了,不过大方向还是对滴:

http://blog.csdn.net/study_live/article/details/5225073

主要用的webservice代理类的代码,也可以第一篇文章最下面有下载

WebServiceClient.cs

using System;
using System.Reflection;

/// <summary>
/// Summary description for WebServiceClient
/// </summary>
public class WebServiceClient
{

public static string Invoke(string webServiceUrl, string methodName, object[] parameters)
{
if (string.IsNullOrEmpty(webServiceUrl))
{
throw new Exception("WebService url  required!");
}
if (string.IsNullOrEmpty(methodName))
{
throw new Exception("Method name required!");
}

object instance = WebServiceProxy.CreateInstance(webServiceUrl);
MethodInfo method = instance.GetType().GetMethod(methodName);
string result = (string)method.Invoke(instance, parameters);
return result;
}
}


测试方法,分别返回 string,datatable,泛型集合(这里是其实就是实体类的数组)

string url = "这里是你的webService地址";//可以放配置文件里
////返回字符串
//string s = WebServiceClient.Invoke(url, "GetServerName", null);
//Response.Write(s);

object instance = WebServiceProxy.CreateInstance(url);

////返回datatable
//MethodInfo method = instance.GetType().GetMethod("GetSubStationInfo");//方法名称
//object[] parameters = { "370102002" };//参数
//DataTable dt = (DataTable)method.Invoke(instance, parameters);

//返回泛型集合
MethodInfo method = instance.GetType().GetMethod("GetRealData");//方法名称
// 如果参数传的是个 dataset , DataSet ds=new DataSet();object[] parameters = {ds};
object[] parameters = { "1510", "5" };//参数
//这里返回的是一个 实体类的数组
object objArray = method.Invoke(instance, parameters);
Type tp = objArray.GetType();
if (tp.IsArray)
{
object[] dataArray = objArray as object[];
for (int i = 0; i < dataArray.Length; i++)
{
object s = dataArray[i] as object;
Type t = s.GetType();
//利用一下方法获取到实体类中的属性的值
//PropertyInfo[] fi = t.GetProperties();
//string str = fi[0].GetValue(s, null).ToString();

string C0001_ITEM_CODE = t.GetProperty("C0001_ITEM_CODE").GetValue(s, null).ToString();
string C0007_PNAME = t.GetProperty("C0007_PNAME").GetValue(s, null).ToString();

//FieldInfo[] fields = t.GetFields();//返回当前type的所有公共字段
}

}




C# WebService动态调用

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: