基于安全原因的考虑,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(); } |
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
OpenWorld18大会:Ellison宣布数据库的搜寻和破坏任务
在旧金山举行的甲骨文OpenWorld 2018大会中,甲骨文首席技术官(CTO)兼创始人Larry Elli […]
-
ObjectRocket着力发展Azure MongoDB服务
MongoDB吸引了微软公司的注意力,微软公司计划针对运行于该公司2017年发布的Azure Cosmos D […]
-
数据库和数据仓库的区别在哪儿?
目前,大部分数据仓库还是用数据库进行管理。数据库是整个数据仓库环境的核心,是数据存放的地方和提供对数据检索的支持。
-
如何使用服务来平衡Oracle RAC 数据库工作负载
为不同的应用程序配置不同的服务,DBA可以更有效地平衡集群工作负载,在Oracle RAC数据库环境下实现更好的应用程序性能。