使用ASP.NET AJAX調(diào)用WCF服務(wù)項(xiàng)模板
開發(fā)平臺(tái)
1.Visual Studio 2008 SP1
2..NET Framework 3.5 SP1
3.ASP.NET AJAX
4.IIS 7或者VS 集成Web服務(wù)器 [WCF 和 SVS 文件配置]
5.Windows Vista
介紹
WCF (Windows Communication Foundation)中新增了很多特性來(lái)加強(qiáng)微軟應(yīng)用程序開發(fā)平臺(tái),尤其是在應(yīng)用程序之間的通信上。在本篇文章 中,我們講了解到WCF是如何直接在客戶端JavaScript中使用的場(chǎng)景。這是由ASP.NET AJAX提供的一項(xiàng)非??岬奶匦浴T诒酒恼轮?,我們 不 會(huì)對(duì)WCF的內(nèi)部細(xì)節(jié)加以大量討論,而是講主要精力放在如何在JavaScript中直接使用服務(wù)。因此,我們?cè)谀缓蟛粫?huì)對(duì)ASP.NET或者.NET運(yùn)行時(shí) 是如何管理這些功能的特性進(jìn)行探討。
為了演示文中涉及的理論與事實(shí),我們講創(chuàng)建一個(gè)帶有兩個(gè)工程的解決方案。因此,不浪費(fèi)時(shí)間了,開始創(chuàng)建一個(gè)空白的解決方案并保存起 來(lái)?,F(xiàn)在,添加一個(gè)新的類庫(kù)項(xiàng)目到解決方案中。命名該類庫(kù)為ServiceLibrary。然后,添加一個(gè)Web應(yīng)用程序工程到該解決方案中并命名為 WEBUI。后面我們將看到有兩種方式添加能夠讓JavaScript調(diào)用的WCF服務(wù)。
1.使用啟用AJAX的WCF服務(wù)項(xiàng)模板
2.在類庫(kù)中使用服務(wù)接口定義
使用啟用AJAX的WCF服務(wù)項(xiàng)模板
這里,我們將看到一種簡(jiǎn)單明了的方式在JavaScript中調(diào)用一個(gè)WCF服務(wù) 。右鍵點(diǎn)擊Web應(yīng)用程序工程并選擇添加新項(xiàng)。選擇啟用AJAX的WCF服務(wù)項(xiàng)模板,并命名為“HelloWorldService.svc” 最后點(diǎn)擊確定。此時(shí), 向?qū)?huì)如愿添加一個(gè)HelloWorldService.svc文件到解決方案中。該文件也提供了代碼分離頁(yè)面。如果你在一個(gè)XML文件編輯器中打開了該文件 ,你將看到如下形式的標(biāo)簽:
<%@ ServiceHost Language="C#" Debug="true" Service="WebUI.HelloWorldService" CodeBehind="HelloWorldService.svc.cs" %> |
如果你打開后臺(tái)代碼文件,將看到如下形式的代碼:
namespace WebUI |
VS 2008會(huì)自動(dòng)為你在web.config文件中添加一些必要的配置,因此不需要手工在web.config文件中添加任何配置?,F(xiàn)在,繼續(xù)并添加一個(gè) HelloWorld()方法,該方法返回一個(gè)“HelloWorld”的字符串并為該方法添加一個(gè)[OperationContract]特性。在本篇文章的后面我們將解釋該 特性。
現(xiàn)在,為Web應(yīng)用程序工程添加一個(gè)頁(yè)面并命名它為“HelloWorldTest.aspx”。從Visual Studio工具箱中拖拽一個(gè)Script Manager項(xiàng)到頁(yè) 面上。在ScriptManager 標(biāo)簽內(nèi)部,添加一個(gè)到該服務(wù)的引用。下面給出了該代碼示例:
<asp:ScriptManager ID="ScriptManager1" runat="server"> |
現(xiàn)在,添加一個(gè)button按鈕和一個(gè)textbox文本框到頁(yè)面上,并為該按鈕添加點(diǎn)擊事件處理程序,以使用JavaScript函數(shù)來(lái)調(diào)用服務(wù)。當(dāng)你 編寫服務(wù)調(diào)用函數(shù)時(shí),Visual Studio 2008 HTML編輯器將提供智能感知功能以方便編寫必要的函數(shù)調(diào)用。完整的HTML代碼如下所示:
<form id="form1" runat="server"> function onFailure(result) { |
注意,當(dāng)調(diào)用服務(wù)時(shí),我們傳遞了兩個(gè)方法:一個(gè)用于進(jìn)行回調(diào)而另一個(gè)用于錯(cuò)誤回調(diào)。如果我們需要傳遞任何參數(shù)到該函數(shù)中,這些參數(shù) 會(huì)首先傳遞進(jìn)去然后再進(jìn)行回調(diào)。
因此,如果我們有一個(gè)名為getvalue 的函數(shù)并接收兩個(gè)字符串參數(shù),那么我們將以[NameSpaceName].[ServiceName].getvalue(“value one”,”value two”,on_success,on_error);的方式調(diào)用該函數(shù),此刻on_success和on_error各自表示回調(diào)和錯(cuò)誤回調(diào)。
【編輯推薦】