实现Silverlight 与数据库交互的途径

基于安全原因的考虑,Silverlight是不允许直接访问数据库的。但还是有很多方法来间接实现Silverlight对数据库的访问。比如以下的三种方式:1 RESTful API;2 在Silverlight下借助JavaScript来实现访问数据库;3 利用.NET Web服务模板——Silverlight-enabled。本文将主要介绍一下后俩种方法。

  利用JavaScript实现Silverlight与数据库的交互

  只要在Silverlight事件处理的后面添加调用以下简单的JavaScript代码即可。其中”callWebService”是JavaScript的函数。

protected void btnSubmit(object sender,EventArgs e) 
  { 
  System.Windows.Browser.HtmlPage.Window.Invoke("callWebService", null); 
  }

  关于JavaScript的调用可以参照一下内容:

  通过ScriptServiceAttribute添加

[ScriptService] 
  public class UserValidationService: System.Web.Services.WebService 
  { 
  [WebMethod] 
  public bool ValidateUserName(string strInput) 
  { 
  return !GetUserByUserName(strInput); //If user exists return false indicates the name is no longer availabe. 
  } 
  private bool GetUserByUserName(string strUserName) 
  { 
  bool blnIsUserExists = false; 
  //Call database API to see if the username is availabe, set blnIsUserExists to true if exists.
  return blnIsUserExists; 
  } 
  }

  通过页面添加ScriptMananger控件

<asp:ScriptManager runat="server" ID="scriptManagerId"> 
                <Services> 
                    <asp:ServiceReference  Path="UserValidationService.asmx" /> 
                </Services> 
               </asp:ScriptManager>

  像调用JavaScript局部函数一样调用Webservice

 <script type="text/javascript"> 
function validateUserName() 

  var userName = document.getElementById("txtUserName").value; 
UserValidationService.ValidateUserName(userName,showValidateResult,validateUserNameError); 
}  
function validateUserNameError(result) 

    //Do nothing if any error, ideally, we should log this error to database. 

function showValidateResult(result) 

//Since it is only a boolean value, no need to get result.d, if result contains .net object, 
// use result.length and result.d to retrieve the object. 
    if(!result) 
    {     
        //Not available 
    }else 
    { 
        //Username is still available 
    } 

</script>

  利用Silverlight-enabled Webservice实现Silverlight与数据库的交互

  首先通过模板创建一个Silverlight-enabled Webservice,然后将数据库和其他Server-related添加到服务里。接下来,将此服务添加引用到Silverlight 应用中。最后利用如下代码从Silverlight 应用中调用webservice。

using MySilver.MyService; 
  ...... 
  ..... 
  private void btnSend_Click(object sender, RoutedEventArgs e) 
  { 
  if (!String.IsNullOrEmpty(txtMessage.Text.Trim())) 
  { 
  lstHisotryMessage.Items.Add("Gene: " + txtMessage.Text.Trim()); 
  GeneMessage message = new GeneMessage(); 
  message.Body = txtMessage.Text.Trim(); 
  MyServiceclient = new MyService(); 
  client.SendMessageCompleted += new EventHandler(client_SendMessageCompleted); 
  client.SendMessageAsync(message); 
  } 
  else 
  { 
  MessageBox.Show("You cannot send empty message!"); 
  } 
  } 
  protected void client_SendMessageCompleted(object sender, SendMessageCompletedEventArgs e) 
  { 
  txtMessage.Text = e.Result.MessageID.ToString(); 
  }

简介

 

本章节提供Silverlight与后台数据库的三种技术实现基本的互操作(Silverlinght Interoperability),构建一个Silverlight SOA的应用。

 

准备环境

 

Windows 2003/2008/vista

Visual Studio.net 2008+sp1

Silverlight 3.0 SDK

Silverlight3 Tools

Microsoft Expression Blend 3

RiaServices.msi

RiaSevicesPreviewBusinessApplication.msi

 

前提

 

熟悉.net framework 3.5

了解Silverlight开发

了解Linq开发

了解Ado.net data service

 

 

主要内容

 

创建一个Silverlight应用程序

创建一个普通的WCF服务提供Silverlight应用调用实现互操作

创建一个Ado.net data service服务提供Silverlight应用调用实现互操作

创建一个Domain Service (RIA-Link)提供Silverlight应用调用实现互操作

 

创建一个Silverlight应用

 

安装完上述开发组件后,在visual studio.net 2008中会加入Silverlight项目模板,你可以选择Silverlight Navigation Application 或是 Silverlight Business Application创建

解决方案结构

运行起来的页面

添加新页,而不是User Control,安装了RIA Service后会新增许多Silverlight项目模板,在你做应用开发的时候会提供非常方便的使用

 

创建一个普通的WCF服务提供Silverlight应用调用实现互操作

 

 

定义WCF接口

 

1执行SQL(insert ,update, delete),实现与数据库的互操作

2执行SQL(select),得到返回的dataset后以string的类型返回

 

Silverlight调用WCF

 

新增,删除,编辑,查询功能通过调用WCF提供的2个接口实现。

注意:Silverlight Datagrid控件无法绑定匿名对象。

 

 

创建一个Ado.net data service服务提供Silverlight应用调用实现互操作

 

 

添加LINQ数据源

 

可以选择ado.net entity data model或是LINQ to SQL Classes

 

添加一个ado.net data service

 

 

Silverlight调用Ado.Net data service

 

新增,删除,编辑,查询功能通过调用Ado.net data service提供的接口实现

新增功能实现完全参考LINQ to SQL实现方式,惟一不同的是必须调用异步方法实现

 

创建一个Domain Service (RIA-LINK提供Silverlight应用调用实现互操作

 

 

添加一个Domain Service

 

选择Domain Service Class

选择需要发布服务的实体类和操作方式,metadata class可以让你很方便实现对实体类的验证和控制显示格式。

 

Silverlight调用RIA-LINK实现互操作

 

新增,删除,编辑,查询功能通过调用RIA-LINK提供的接口实现

RIA-LINK(SilverlightApplication3.Web.g.cs)

调用LINQ查询,不同的是不再需要调用异步方法实现这些功能,也不需要引用服务

 

RIA Serve框架

 

 

 

三种实现方式的比较


 

WCF服务

ADO.NET Data Service

RIA Service

构建应用程序效率

扩展性

安全性

性能

数据库兼容性

仅支持MS SQL

仅支持MS SQL

 

 

 

 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值