WCF先生弯下腰去系鞋带,不禁为眼前的景色所吸引。粉红色的凉鞋晶莹剔透,白里透红的长腿透着健康的气息,由于距离近,看得很清楚,每一寸肌肤都洁白无暇,充满着弹性。
"系好了吗?", 正看得入神,Web Service小姐的声音从桌子上传来。
"马上好了", WCF先生慌忙系好鞋带,直起身子来。看见Web Service小姐看着他笑,有些发毛。
"你的头发可以养鸟了", Web Service小姐笑着说。
WCF先生摸了一下,发现头发被桌子压得乱成一团,俨然一个鸡窝,不好意思的用手梳理了一下。
"还有这里", Web Service小姐用手将他右边的一缕竖起来的头发压了下去,如同春风吹低了野草。
"我是猪,呼噜噜,不服和我比腿粗...",旁边座位一个少女的手机响了起来。
"AJAX!", Web Service小姐惊呼了一声。
"AJAX是猪吗?", WCF先生不解的问。
"讨厌! 他最近在给一家猪场做网站,最近几天会从我这里拿数据",Web Service小姐略带忧色的说。
"不用担心,现在我们就可以弄一下。",最难消受美人恩,WCF先生踊跃的回答。
"以前的那个服务留给你以后复习用吧,我们新建一个服务。首先建立猪和猪圈的类。", WCF先生建立了两个类:Pig和PigPool。
"然后建立服务接口.", 照葫芦画瓢,WCF先生很快创建了IPigService接口.
"注意接口级别的Namespace和Name,这个很重要,WCF会根据这个属性生成客户端的类;还有方法上不能应用UriTemplate标记。", WCF先生指着代码解说道。
"然后是具体的实现类", 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,添加了如下的内容。
"这些设置就是告诉服务器,http://localhost:20408/PigService.svc这个服务需要支持AJAX,服务器会根据我们刚才定义的类,自动生成对应的Javascript类供AJAX调用。",WCF先生用鼠标在web.config上滑动,看着Web Service小姐说。
"说曹操曹操就到.", Web Service小姐指着窗外。AJAX先生背着背包,骑着山地自行车,飞也似的奔腾在回家的路上。
"好吧",WCF先生无奈的说。
"现在我们就来看看AJAX怎么用我们提供的服务吧。", WCF创建了一个新页面。
"我们在上面放两个按钮,一个用来获取所有猪的信息,一个用来添加猪的信息,还有一个div用来显示返回的结果。", WCF先生创建了界面。
"在页面上加一个ScriptManager,这个是进行AJAX操作必备的,在里面加一个Service, 地址就是刚才在web.config里面定义的endpoint."
"添加Javascript函数,注意这里类的使用,与在服务器端类似,非常方便。不过这里是异步调用。"
"我再好好看看。", Web Service用小巧的手拿过鼠标,看了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">
<htmlxmlns="http://www.w3.org/1999/xhtml"> <headid="Head1"runat="server"> <title></title> </head> <body> <formid="form1"runat="server">
<asp:ScriptManagerID="ScriptManager1"runat="server"> <Services> <asp:ServiceReferencePath="http://localhost:20408/PigService.svc"/> </Services> </asp:ScriptManager>
<scripttype="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><inputtype="button"value="Get All Pigs"onclick="getAllPigs()"/> <inputtype="button"value="Add a Pig"onclick="addPig()"/></div> <div>Result:</div> <divid="divAllPigs"style="border:solid 1px black;">
</div>
</div> </form> </body> </html> |
"现在测试一下", WCF先生拿过鼠标,上面还残留着Web Service小姐的体温,在浏览器中打开WebForm2.aspx。
"看,两头猪返回了。", WCF先生点了一下Get All Pigs按钮说。
"加一头猪。", WCF先生点了一下Add A Pig按钮。返回结果中除了刚才的两头猪,又多了一条158斤重的母猪。
这时,穿着暗红色套装的服务员拿着菜单走了过来,对WCF先生说:"对不起先生,我们这里没有烤全猪。要不您点个别的?",两人一愣,原来刚才说"加一头猪"引起了误会。
WCF先生活动了一下脚,发现还是很痛。对面的Web Service小姐拿着鼠标在翻着代码。
"你在找什么?", WCF先生奇怪的问。
"我在找JavaScript代码,我们写的是C#代码,肿么就能直接被AJAX调用了?", Web Service小姐头也不抬的说道。
"有思想!", WCF先生赞叹道。
"现在我们直接在IE里访问一下EndPoint。", WCF先生在IE里输入http://localhost:20408/PigService.svc。
"看不出来什么。", Web Service小姐看了一下输出的结果说。
"嗯,是没什么。我们在网址的后面加上/js看看。", WCF先生敲入了新网址。
"再加上/jsdebug看看",WCF先生将/js改成/jsdebug,结果还是一样。
"这就是奥妙所在了,服务器会自动根据C#代码生成JavaScript类,然后AJAX就可以调用生成的JavaScript类。",WCF先生边画示意图边说。
"明白了。", Web Service小姐直视着WCF先生,高兴的说。她甜甜的笑,清爽而动人。
脚一时好不了了,WCF先生只好请Web Service小姐帮忙。有了她的搀扶,路好走多了,虽然花了将近30分钟时间才到家,但是感觉只有几分钟,留在身上的清香恐怕要让他沉醉一阵子了。
到了家门口,WCF先生打开灯,柔和的灯光洒在Web Service小姐的身上,显得更加柔美了。
"到屋里坐坐吧",WCF先生忍不住邀请道...