table = (DataTable)method.Invoke(o, aa);  这句代码报错,报错如下:
---------------------------
System.InvalidCastException: 无法将类型为“TestWebService.GetUserInfotempResponseGetUserInfotempResult”的对象强制转换为类型“System.Data.DataTable”。    在 postAC.Form1.toolStripButton3_Click(Object sender, EventArgs e)
---------------------------System.InvalidCastException: 无法将类型为“”的对象强制转换为类型“System.Data.DataTable”
代码在我自己上调试没有问题,而在同事的机器上调试就有问题
我的是.net 2.0.50727 sp2 同事的是 .net 2.0.50727 如果这样的话,我同事的机器上需要装什么才行?我已经给他装了.net framework2.0 sp2了,可还是不行。

解决方案 »

  1.   

    table = (DataTable)method.Invoke(o, aa); 这句 分2次执行 看看里面的值是多少
      

  2.   

    什么值是多少?你的意思是看datatable里有没有记录么?
      

  3.   

    1、检查同事机器上的 webservice 的代码和你机器上的是否一致;
    2、检查同事机器上 webservice 用 IE 访问是否正常,是否有防火墙之类的;
    3、重新编译webservice 后,重启 iis,后访问试试问题是否解决,有问题欢迎随时反馈。
      

  4.   

    (DataTable)method.Invoke(o, aa); 建议把该method的定义给出,我想知道那个DataTable是如何产生的。
      

  5.   

    Invoke应该不能转化为datatable吧
      

  6.   

    invoke返回的是object  你确定你同事那里返回的是由DATATABLE转换的OBJECT么?
      

  7.   

    object result = methodInfo.Invoke(o, aa); 
      

  8.   

      Assembly asm = Assembly.LoadFrom("Test.dll");
                          Type t = asm.GetType("TestWebService.CNMMBBWebService");
                        object o = Activator.CreateInstance(t);                     MethodInfo method = t.GetMethod("GetUser                   
      object[] aa = { str, str2, Arg.lunid, Arg.vivion };
    table = (DataTable)method.Invoke(o, aa);
      

  9.   

    -----------
    我看了下,在报错的机器上类型是这个:TestWebService.GetUserInfotempResponseGetUserInfotempResult
      

  10.   

    我是通过动态加载webservice,然后从webservice中获得一个datatable给我的cs程序的
      

  11.   

    而且如果我webservice的方法是返回的string 型的话,那台出错的客户端接收是正常的
      

  12.   

    即使我把运态引用换成固定的 web 引用,在出错的机器上还是报同意的错,在编译的时候就通不过
      

  13.   

    即使我把运态引用换成固定的 web 引用,如果返回的是datatable 在出错的机器上还是报同样的错,在编译的时候就通不过
      

  14.   

    你那个Test.dll是怎么写的?GetUser函数又是如何定义的?
      

  15.   

     我将动态引用换成固定的web引用后,还是不行。
     CNMMBBWEBSERVICE.CNMMBBWebService CNWS = new CNMMBBWEBSERVICE.CNMMBBWebService();
     table = CNWS.GetUserInfotemp(str, str2, Arg.lunid, Arg.vivion);
    webservice 中GetUserInfotemp代码如下:public DataTable GetUserInfotemp(string str,string str2,string lunid,string vivion )
        {
            DataTable dt = new DataTable();        SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@username", str), 
                 new SqlParameter("@mathingcode", str2), new SqlParameter("@lunid", lunid),
                 new SqlParameter("@vivion",  vivion) };        dt = DbHelper.Query("GetUserInfotemp", parameters);
            dt.TableName = "GetUserInfotemp";
            
             
            return dt;    }问题如下:
    1:GetUserInfotemp返回的是一个datatable 
    2:这段代码在我的机器上编译能通过且能正常运行,而在同事的机器上编译通不过,提示为:
    无法将类型“CNMMBBWEBSERVICE.GetUserInfotempResponseGetUserInfotempResult”隐式转换为“System.Data.DataTable”3:如果我将GetUserInfotemp的返回值写成string 则同事的机器上能正常。
    4:如果我将GetUserInfotemp的返回值写成dataset则同事的机器仍为报错。出错与2类似。5:我的机器为.net 2.0.50727 sp2 同事的是 .net 2.0.50727 
    这个问题我已经倒腾2天多了,大哥们,麻烦你帮我指点下吧
      

  16.   

    感觉上应该是DataTable在序列化传递过程中出现问题了,你在webservice上面先序列化,然后返回序列化后的数据public byte[] GetUserInfotemp(string str,string str2,string lunid,string vivion )
    {
    DataTable dt = new DataTable();SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@username", str), 
    new SqlParameter("@mathingcode", str2), new SqlParameter("@lunid", lunid),
    new SqlParameter("@vivion", vivion) };dt = DbHelper.Query("GetUserInfotemp", parameters);
    dt.TableName = "GetUserInfotemp";
               IFormatter formatter = new BinaryFormatter();
                MemoryStream ms = new MemoryStream();
                formatter.Serialize(ms, dt);
                byte[] bytes = new byte[ms.Length];
                ms.Read(bytes,0,bytes.Length);
                ms.Close();return bytes;}
    客户端再进行反序列化就可以了
    CNMMBBWEBSERVICE.CNMMBBWebService CNWS = new CNMMBBWEBSERVICE.CNMMBBWebService();
    byte[] bytes = CNWS.GetUserInfotemp(str, str2, Arg.lunid, Arg.vivion);
               MemoryStream ms = new MemoryStream(bytes);
    IFormatter formatter = new BinaryFormatter();
    DataTable dt =(DataTable)formatter.Deserialize(ms);
      

  17.   

    给你的同事升级下.NET版本,最起码要SP2啊,如果觉得麻烦,直接安装.NET3.5SP1,包含了以前所有版本的升级。
      

  18.   

    SP2 之前我也给他装了一样的报错的现在好了,我把所有返回datatable 全改成dataset 。就正常了。