Web服務(wù)小姐的嫁衣 (五)
WCF先生彎下腰去系鞋帶,不禁為眼前的景色所吸引。粉紅色的涼鞋晶瑩剔透,白里透紅的長腿透著健康的氣息,由于距離近,看得很清楚,每一寸肌膚都潔白無暇,充滿著彈性。
"系好了嗎?", 正看得入神,Web Service小姐的聲音從桌子上傳來。
"馬上好了", WCF先生慌忙系好鞋帶,直起身子來??匆奧eb Service小姐看著他笑,有些發(fā)毛。
"你的頭發(fā)可以養(yǎng)鳥了", Web Service小姐笑著說。
WCF先生摸了一下,發(fā)現(xiàn)頭發(fā)被桌子壓得亂成一團,儼然一個雞窩,不好意思的用手梳理了一下。
"還有這里", Web Service小姐用手將他右邊的一縷豎起來的頭發(fā)壓了下去,如同春風(fēng)吹低了野草。
"我是豬,呼嚕嚕,不服和我比腿粗...",旁邊座位一個少女的手機響了起來。
"AJAX!", Web Service小姐驚呼了一聲。
"AJAX是豬嗎?", WCF先生不解的問。
"討厭! 他最近在給一家豬場做網(wǎng)站,最近幾天會從我這里拿數(shù)據(jù)",Web Service小姐略帶憂色的說。
"不用擔(dān)心,現(xiàn)在我們就可以弄一下。",最難消受美人恩,WCF先生踴躍的回答。
"以前的那個服務(wù)留給你以后復(fù)習(xí)用吧,我們新建一個服務(wù)。首先建立豬和豬圈的類。", WCF先生建立了兩個類:Pig和PigPool。
"然后建立服務(wù)接口.", 照葫蘆畫瓢,WCF先生很快創(chuàng)建了IPigService接口.
"注意接口級別的Namespace和Name,這個很重要,WCF會根據(jù)這個屬性生成客戶端的類;還有方法上不能應(yīng)用UriTemplate標(biāo)記。", WCF先生指著代碼解說道。
"然后是具體的實現(xiàn)類", WCF先生打開PigService.svc.cs,添加了GetAllPigs方法和AddPig方法。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.Serialization;
- using System.ServiceModel;
- using System.Text;
- namespace WcfService1
- {
- // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "PigService" in code, svc and config file together.
- [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
- publicclassPigService : IPigService
- {
- privatePigPool GetPigs()
- {
- PigPool pigs = newPigPool();
- pigs.Add(newPig()
- {
- Name = "Pig1",
- Weight = 150,
- Sex = "Male"
- });
- pigs.Add(newPig()
- {
- Name = "Pig2",
- Weight = 150,
- Sex = "Female"
- });
- return pigs;
- }
- publicPigPool GetAllPigs()
- {
- return GetPigs();
- }
- publicPigPool AddPig(Pig pig)
- {
- PigPool ret = GetPigs();
- ret.Add(pig);
- return ret;
- }
- }
- }
"好了?", Web Service睜著顧盼流連的大眼睛問道。
"還不夠,我們還需要更改web.config讓它支持AJAX.", WCF先生打開web.config,添加了如下的內(nèi)容。
"這些設(shè)置就是告訴服務(wù)器,http://localhost:20408/PigService.svc這個服務(wù)需要支持AJAX,服務(wù)器會根據(jù)我們剛才定義的類,自動生成對應(yīng)的Javascript類供AJAX調(diào)用。",WCF先生用鼠標(biāo)在web.config上滑動,看著Web Service小姐說。
"說曹操曹操就到.", Web Service小姐指著窗外。AJAX先生背著背包,騎著山地自行車,飛也似的奔騰在回家的路上。
"好吧",WCF先生無奈的說。
"現(xiàn)在我們就來看看AJAX怎么用我們提供的服務(wù)吧。", WCF創(chuàng)建了一個新頁面。
"我們在上面放兩個按鈕,一個用來獲取所有豬的信息,一個用來添加豬的信息,還有一個div用來顯示返回的結(jié)果。", WCF先生創(chuàng)建了界面。
"在頁面上加一個ScriptManager,這個是進行AJAX操作必備的,在里面加一個Service, 地址就是剛才在web.config里面定義的endpoint."
"添加Javascript函數(shù),注意這里類的使用,與在服務(wù)器端類似,非常方便。不過這里是異步調(diào)用。"
"我再好好看看。", Web Service用小巧的手拿過鼠標(biāo),看了WebForm2.aspx大概 5分鐘左右,才讀懂其中的意思。
- <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="WebForm2.aspx.cs"Inherits="WcfService1.WebForm2"%>
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlnshtmlxmlns="http://www.w3.org/1999/xhtml">
- <headidheadid="Head1"runat="server">
- <title></title>
- </head>
- <body>
- <formidformid="form1"runat="server">
- <asp:ScriptManagerIDasp:ScriptManagerID="ScriptManager1"runat="server">
- <Services>
- <asp:ServiceReferencePathasp:ServiceReferencePath="http://localhost:20408/PigService.svc"/>
- </Services>
- </asp:ScriptManager>
- <scripttypescripttype="text/javascript"language="javascript">
- function getAllPigs() {
- var myProxy = new wcfservice1.Services.PigService();
- myProxy.GetAllPigs(onSuccessGetCars, onFailGetCars, myProxy);
- }
- function onSuccessGetCars(result) {
- var allPigs = "";
- for (var i = 0; i < result.length; i++) {
- allPigs += " " + result[i].Name + " " + result[i].Weight + " " + result[i].Sex;
- } $get("divAllPigs").innerText = allPigs;
- }
- function onFailGetCars(result) {
- alert(result);
- }
- function addPig() {
- var myProxy = new wcfservice1.Services.PigService();
- var myPig = new WcfService1.Pig();
- myPig.Name = "Pig 3";
- myPig.Weight = 158;
- myPig.Sex = "Female";
- myProxy.AddPig(myPig, onSuccessAdd, onFailAdd, myProxy);
- }
- function onSuccessAdd(result) {
- var allPigs = "";
- for (var i = 0; i < result.length; i++) {
- allPigs += " " + result[i].Name + " " + result[i].Weight + " " + result[i].Sex;
- } $get("divAllPigs").innerText = allPigs;
- }
- function onFailAdd(result) {
- alert(result);
- }
- </script>
- <div>
- <div><inputtypeinputtype="button"value="Get All Pigs"onclick="getAllPigs()"/> <inputtypeinputtype="button"value="Add a Pig"onclick="addPig()"/></div>
- <div>Result:</div>
- <dividdivid="divAllPigs"style="border:solid 1px black;">
- </div>
- </div>
- </form>
- </body>
- </html>
試一下", WCF先生拿過鼠標(biāo),上面還殘留著Web Service小姐的體溫,在瀏覽器中打開WebForm2.aspx。
"看,兩頭豬返回了。", WCF先生點了一下Get All Pigs按鈕說。
"加一頭豬。", WCF先生點了一下Add A Pig按鈕。返回結(jié)果中除了剛才的兩頭豬,又多了一條158斤重的母豬。
這時,穿著暗紅色套裝的服務(wù)員拿著菜單走了過來,對WCF先生說:"對不起先生,我們這里沒有烤全豬。要不您點個別的?",兩人一愣,原來剛才說"加一頭豬"引起了誤會。
WCF先生活動了一下腳,發(fā)現(xiàn)還是很痛。對面的Web Service小姐拿著鼠標(biāo)在翻著代碼。
"你在找什么?", WCF先生奇怪的問。
"我在找JavaScript代碼,我們寫的是C#代碼,腫么就能直接被AJAX調(diào)用了?", Web Service小姐頭也不抬的說道。
"有思想!", WCF先生贊嘆道。
"現(xiàn)在我們直接在IE里訪問一下EndPoint。", WCF先生在IE里輸入http://localhost:20408/PigService.svc。
"看不出來什么。", Web Service小姐看了一下輸出的結(jié)果說。
"嗯,是沒什么。我們在網(wǎng)址的后面加上/js看看。", WCF先生敲入了新網(wǎng)址。
"再加上/jsdebug看看",WCF先生將/js改成/jsdebug,結(jié)果還是一樣。
"這就是奧妙所在了,服務(wù)器會自動根據(jù)C#代碼生成JavaScript類,然后AJAX就可以調(diào)用生成的JavaScript類。",WCF先生邊畫示意圖邊說。
"明白了。", Web Service小姐直視著WCF先生,高興的說。她甜甜的笑,清爽而動人。
腳一時好不了了,WCF先生只好請Web Service小姐幫忙。有了她的攙扶,路好走多了,雖然花了將近30分鐘時間才到家,但是感覺只有幾分鐘,留在身上的清香恐怕要讓他沉醉一陣子了。
到了家門口,WCF先生打開燈,柔和的燈光灑在Web Service小姐的身上,顯得更加柔美了。
"到屋里坐坐吧",WCF先生忍不住邀請道...
原文鏈接:http://www.cnblogs.com/time-is-life/archive/2012/09/19/2694237.html