基于安全原因的考虑,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); } |
通过ScriptServiceAttribute添加
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;
}
}
<Services>
<asp:ServiceReference Path="UserValidationService.asmx" />
</Services>
</asp:ScriptManager>
像调用JavaScript局部函数一样调用Webservice
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
Silverlight调用Ado.Net data service
新增,删除,编辑,查询功能通过调用Ado.net data service提供的接口实现
新增功能实现完全参考LINQ to sql实现方式,惟一不同的是必须调用异步方法实现
创建一个Domain Service (RIA-LINK)提供Silverlight应用调用实现互操作
选择Domain Service Class
选择需要发布服务的实体类和操作方式,Metadata class可以让你很方便实现对实体类的验证和控制显示格式。
Silverlight调用RIA-LINK实现互操作
新增,删除,编辑,查询功能通过调用RIA-LINK提供的接口实现
RIA-LINK(SilverlightApplication3.Web.g.cs)
调用LINQ查询,不同的是不再需要调用异步方法实现这些功能,也不需要引用服务
RIA Serve框架
三种实现方式的比较
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。