Silverligh訪問數據庫方法技巧指導
Silverligh的應用范圍比較廣泛。在開發人員實際使用中,可以輕松的實現各種基于多媒體方面功能。基于安全原因的考慮,Silverlight是不允許直接訪問數據庫的。但還是有很多方法來間接實現Silverlight對數據庫的訪問。#t#
比如以下的三種方式: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 blnIsUser
Exists 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,validate
UserNameError);- }
- 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< SendMessageCompleted
EventArgs>(client_SendMessageCompleted);- client.SendMessageAsync(message);
- }
- else
- {
- MessageBox.Show("You cannot send empty message!");
- }
- }
- protected void client_SendMessage
Completed(object sender, SendMessage
CompletedEventArgs e)- {
- txtMessage.Text = e.Result.MessageID.ToString();