ASP.NET調(diào)用WCF服務(wù)
ASP.NET調(diào)用WCF服務(wù)
現(xiàn)在我們來看一下分析從一個客戶端ASP.NET頁面中的<script>節(jié)中來使用此WFC服務(wù)呢?其實,從頁面開發(fā)者角度來看,調(diào)用WCF服務(wù)的操作步驟與調(diào)用一個Web服務(wù)所要求的步驟沒有太大的區(qū)別。
第一步是使用ASP.NET AJAX框架的腳本管理器控件ScriptManager中的SVC端點注冊所要引用的WFC服務(wù),如下所示:
- <asp:ScriptManager ID="ScriptManager1" runat="server">
- <Services>
- <asp:ServiceReference Path="~/TimeService.svc" />
- </Services>
- </asp:ScriptManager>
當(dāng)處理上面的標(biāo)記時,ScriptManager控件將觸發(fā)器額外的請求用以生成和下載指定的WCF服務(wù)的JavaScript代理類。然后,客戶端頁面將使用這個代理類實現(xiàn)相應(yīng)的調(diào)用。
注意到,代理類的名字是根據(jù)WCF服務(wù)的命名空間進行命名的,具體是由ServiceContract屬性的Namespace參數(shù)進行聲明的。如果你保留此參數(shù)為其缺省值(即 Tempuri.org),那么該代理類的名字為Tempuri.org.TimeService。
第二步,我們使用下列JavaScript來調(diào)用前面WCF服務(wù)中定義的方法GetTimeFormat:
- <script language="javascript" type="text/javascript">...
- function getTime()
- ...{
- Samples.Services.TimeService.GetTimeFormat(
- "dd-mm-yyyy [hh:mm:ss]", onMethodCompleted);
- }
- function onMethodCompleted(results)
- ...{
- $get("lblCurrentTime").innerText = results;
- }
- </script>
- …………
- </head>
- <body>
- <form id="form1" runat="server">
- <asp:ScriptManager ID="ScriptManager1" runat="server">
- <Services>
- <asp:ServiceReference Path="~/TimeService.svc" />
- </Services>
- </asp:ScriptManager>
- <div class="style3"
- style="border-style: double; border-color: #008000; ">
- <span class="style1">在</span><span class="style1" lang="EN-US">
ASP.NET 3.5 AJAX</span><span- class="style1">開發(fā)中調(diào)用</span><span class="style1" lang="EN-US">
WCF</span><span- class="style1">服務(wù)<br />
- </span>
- </div>
- </form>
- <input id="Button1" type="button" value="取得當(dāng)前服務(wù)器端時間"
onclick="getTime()" />- <div id="lblCurrentTime">
- </div>
- </body>
這里JavaScript代理類是由靜態(tài)方法組成的,它們的名字和語法聲明與WCF服務(wù)端點的原型是完全相匹配的。另外,類似于ASP.NET AJAX Web服務(wù),每一個JavaScript代理方法也支持一組額外的參數(shù),這是一組回調(diào)函數(shù),用于處理調(diào)用過程中可能會出現(xiàn)的成功和失敗,在此不再贅述。
【編輯推薦】