一起来打太极(4)

遇到麻烦了!

嗯,让我先来整理一下思路,如何讲清楚这个问题。好的,就让我们这样来说吧,首先我们创建两个Project,第一个Project是Class Library,即类库的,里面有一个实体类及一个控制类,假设实体类如何下:

public class User
{
    public User()
    {
    }
   private string name;
   private int age;
   private DateTime birthDay;
   public string Name
  {
      get{return this.name;}
      set{this.name=value;}
  }
  public int Age
  {
       get{return this.age;}
       set{this.age=value;}
  }
  public DateTime BirthDay
  {
     get{ return this.birthDay;}
     set{ this.birthDay=value;}
  }

然后再做一个控制类,里面就一个方法,这个方法返回一个User[]的数组。

public User[] GetUser(){…}

OK,第二个Project是一个ASP.NET的Web应用程序,并且引用上面的这个Class Library,在其默认ASP.NET页面上放一个DataGrid,然后这个DataGrid的数据源指定为上面那个项目中的控制类的方法,即将DataGrid1绑定到一个User[]数组上,大家可以试一下,这是可以成功的。因为DataSource的数据源可以为实现了System.Collections.IEnumerable接口的对象,而数组类型是继承自System.Array的,System.Array实现了System.Collections.IEnumerable接口。

但是接下来,我们引入Web Service,即先解除ASP.NET的Web应用对于Class Library的引用关系,然后Web Service引用Class Library,而ASP.NET通过Web引用建立与Web Service项目的联系。如下图所示

ASP.NET___WEB引用Web Service引用____Class Library

在Web Service项目当中,建立一个Web Method对Class Library进行一下Wrap:

[WebMethod] public User[] GetUser()
{
   //直接调用Class Library中的GetUser方法,并且返回其结果;

然后在ASP.NET的默认ASP.NET页面中调用此Web方法,进行数据绑定,现在再查看,肯定会得到一个异常,说无法绑定。

我追踪了一下午,基本上发现了问题所在:

  • 当加入Web Service的时候,ASP.NET将User类进行了一个包装,注意,这时候的User不是Class Library中定义的User类了,而是Web Service Client端由VS.NET自己定义的一个User类;
  • Web Service中的这个User类所创建的数组无法进行数据绑定,甚至无法将这个类的数组通过强制类型转换转换为Class Library中声明的那个User类的数组。

问题就是这样,但解决方案尚未出来,希望哪位大侠不吝赐教!

需求又出来新版本了,数据库设计也基本上出来了。不过今天晚上他们又要去需求方汇报,不知道需求是不是还会改?

周末拜见了岳父岳母大人,已经正式取得合法的恋爱执照了尴尬的笑脸