对于在Silverlight中访问数据,初学者的误解之一就是他们在Silverlight中寻找ADO.NET类库。别找了,找不到的。记住,Silverlight是部署在互联网上的客端技术,你不能要求一个浏览器插件去直接访问你的数据库……除非你想把数据库直接暴露在网络上。我们都知道绝对不能这么做。
所以比较可行的方法是在服务层上暴露数据。这也是Silverlight进行数据通信的方式。这里有一些主要的访问手段:
- Web服务: SOAP, ASP.NET web services (ASMX), WCF services, POX, REST 终端
- 套接字: 网络套接字通信(Network Socket Communication)
- 文件: 通过Web请求访问静态内
对于本项目来说技框架已搭建完成,它是采用RIA Service服务来与数据层交换的:那么什么是RIA Service服务呢?简单的说就是ADO.NET服务应用的WCF实现。
为了数据的安全性,添加了数据逻辑层来处理silverlight展示的GIS数据。
1 /// <summary> 2 /// 用户服务 3 /// </summary> 4 public class UserService 5 { 6 public event EventHandler<BLL.Bases.ObjectEventArgs<User>> OnGetUserByCodeCompleted; 7 8 public void GetUserByCode(string pUserCode) 9 { 10 UserDALContext myUserDal = new UserDALContext(); 11 myUserDal.GetUser(pUserCode, this.GetUserCompleted, "GetUserByCode"); 12 } 13 14 private void GetUserCompleted(InvokeOperation<User> pUserValue) 15 { 16 if (this.OnGetUserByCodeCompleted != null) 17 { 18 this.OnGetUserByCodeCompleted(this, new Bases.ObjectEventArgs<User>(pUserValue.Value)); 19 } 20 } 21 22 /// <summary> 23 /// 更新用户信息 24 /// </summary> 25 /// <param name="pUser"></param> 26 public void UpdateUser(User pUser) 27 { 28 UserDALContext myUserDAL = new UserDALContext(); 29 pUser.TableShowedConfigString = pUser.GetTablesShowedConfig().GetXml(); 30 myUserDAL.UpdateUser(pUser, this.UpdateUserOK, ""); 31 } 32 33 /// <summary> 34 /// 当更新用户信息成功后触发的事件 35 /// </summary> 36 public event EventHandler<EventArgs> OnUpdateUserOK; 37 38 /// <summary> 39 /// 当用户更新之后执行的函数 40 /// </summary> 41 /// <param name="pValue"></param> 42 private void UpdateUserOK(InvokeOperation pValue) 43 { 44 if (this.OnUpdateUserOK != null) 45 { 46 this.OnUpdateUserOK(this, new EventArgs()); 47 } 48 } 49 }