webservice调用

lihuinihao6315 2011-08-16 04:45:35
大家好:
 
//webservice
/// <summary>
/// 执行BLL层调用
/// </summary>
/// <param name="ProjectName">项目名称</param>
/// <param name="spaceName">命名空间</param>
/// <param name="className">类名</param>
/// <param name="functionName">方法名</param>
/// <param name="parametersTypeStr">参数类型列表</param>
/// <param name="parametersValue">参数值列表</param>
/// <returns>有返回值:成功返回Object,失败返回string类型错误信息。无返回值:陈功返回 null,失败返回string类型错误信息</returns>
[WebMethod]
public string ExecuteCommand(string ProjectName, string spaceName, string className, object[] classMenth, string functionName, object[] parametersTypeStr, object[] parametersValue)
{
string Message = "0";

object ReturnValue = ReflectionCommand.OperateFuction(ProjectName, spaceName, className, classMenth,functionName, parametersTypeStr, parametersValue, out Message);

Message = Message == "0" ?ReturnValue==null?"": JsonHelper.GetJson<object>(ReturnValue) : Message;

return Message;
}

下面是 反射

/// <summary>
/// 执行指定类的方法
/// </summary>
/// <param name="ProjectName">类所在项目名称 </param>
/// <param name="spaceName">类所在命名空间</param>
/// <param name="className">类名</param>
/// <param name="classMenth">构造参数列表</param>
/// <param name="functionName">要执行的方法名</param>
/// <param name="parametersType">执行方法的参数类型</param>
/// <param name="parametersValue">执行方法的参数集合</param>
/// <param name="Message">错误信息:0成功,err:存在此字符表示出错</param>
/// <returns>object</returns>
public static object OperateFuction(string ProjectName, string spaceName,
string className, object[] classMenth, string functionName,
object[] parametersTypeStr, object[] parametersValue,
out string Message)
{

object returnObj = null;
Message = "0"; //默认成功

System.Type type = GetClassType(ProjectName, spaceName, className);

if (type != null)
{
Object obj;
if (classMenth.Length > 0 && classMenth[0] != null)
{
obj = Activator.CreateInstance(type, classMenth);//得到类对象
}
else
{
obj = Activator.CreateInstance(type);//得到类对象
}

System.Type[] parametersType = new Type[parametersTypeStr.Length];// 定义参数类型
int i = 0;
foreach (string str in parametersTypeStr)
{
System.Type parameterType = Type.GetType(str);

parametersType[i] = parameterType;
i++;
}
System.Reflection.MethodInfo method;
if (parametersTypeStr[0].ToString() == "")
{
method = type.GetMethod(functionName); //类中查找方法
}
else
{
method = type.GetMethod(functionName, parametersType); //类中查找方法
}
if (method != null)
{
try
{
returnObj = method.Invoke(obj, parametersValue);//问题:请问我想在这里使用 out输出参数请问怎么用。问题2 parametersValue集合中有一项 是list<实体>请问我 在webservice里怎么写怎么传过来,传过来后怎么使用 }
catch (System.Exception e)
{
Message = "err:" + e.Message;
}
}
}
return returnObj;
}

请大家帮忙解答。谢谢,给分不吝啬。请同行救急。
...全文
74 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihuinihao6315 2011-08-16
  • 打赏
  • 举报
回复
如6楼所言。给分。
huangwenquan123 2011-08-16
  • 打赏
  • 举报
回复
这样?
class Program
{
static void Main(string[] args)
{
string str = "aa";
List<Model> list = new List<Model>() { new Model { Id = 1, Name = "csdn" }, new Model { Id = 2, Name = "cnblogs" } };
object[] para = new object[] { list, str };
Assembly assem = Assembly.GetExecutingAssembly();
Type type = assem.GetType("ConsoleApplication1.ClassA");
MethodInfo method = type.GetMethod("Test");
object o = Activator.CreateInstance(type);
method.Invoke(o, para);
Console.ReadLine();
}
}
public class ClassA
{
public void Test(List<Model> list, out string str)
{
str = "test";
Console.WriteLine(str);
foreach (Model m in list)
Console.WriteLine("{0}=={1}", m.Id, m.Name);
}
}
public class Model
{
private int id;

public int Id
{
get { return id; }
set { id = value; }
}
private string name;

public string Name
{
get { return name; }
set { name = value; }
}
}
lihuinihao6315 2011-08-16
  • 打赏
  • 举报
回复
1-3楼 我的问题不是这个,这个我已经写好了。
4楼object[] para = new object[] { str };这句中,我需要para[0]=List<实体> para[1]= ref 返回值。。。
请高手帮忙,发言有分,分不够重开帖子。
huangwenquan123 2011-08-16
  • 打赏
  • 举报
回复

//问题1
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string str = "aa";
object[] para = new object[] { str };
Assembly assem = Assembly.GetExecutingAssembly();
Type type = assem.GetType("ConsoleApplication1.ClassA");
MethodInfo method = type.GetMethod("Test");
object o = Activator.CreateInstance(type);
method.Invoke(o, para);
Console.ReadLine();
}
}
public class ClassA
{
public void Test(out string str)
{
str = "test";
Console.WriteLine(str);
}
}
}
//test
jianshao810 2011-08-16
  • 打赏
  • 举报
回复
http://www.cnblogs.com/Richet/archive/2011/05/12/2044143.html
顶一下。
子夜__ 2011-08-16
  • 打赏
  • 举报
回复
传递List<T> 序列化 反序列化

参考
zhou_xuexi 2011-08-16
  • 打赏
  • 举报
回复
在项目网站中右击选择添加文本引用,然后选择是哪个类型的

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧