基于安全原因的考虑,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<SendMessageCompletedEventArgs>(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中国
相关推荐
-
AWS MEAN堆栈+JavaScript=快速搭建应用
开发人员在构建Web应用时有许多选择。市面上有无数的框架和语言可选,而像AWS这样的云平台可以方便地部署和扩展应用程序。
-
JDK 8u40更新:新增功能抢先看
俗话说长江后浪推前浪,一代新人换旧人,Java更新版本交替,也是这样一个道理。甲骨文又给Java添加了哪些新功能。
-
移动浏览器到云:JavaScript地位正在扩张
不难发现人们非常喜欢在前端开发中使用JavaScript。但是,令我们惊讶的是后端开发也如此青睐JavaScript,促进了基于云和基于数据中心的托管应用的发展。
-
移动HTML5挑战何在?
当HTML5出现时,许多开发者和应用架构师视之为创建平台独立应用、简化你的设备支持以及当新的移动设备OS版本发布时减少应用相关问题的机会。