ASP.NET调用WCF服务
现在我们来看一下分析从一个客户端ASP.NET页面中的<script>节中来使用此WFC服务呢?其实,从页面开发者角度来看,调用WCF服务的操作步骤与调用一个Web服务所要求的步骤没有太大的区别。
第一步是使用ASP.NET AJAX框架的脚本管理器控件ScriptManager中的SVC端点注册所要引用的WFC服务,如下所示:
- <asp:ScriptManager ID="ScriptManager1" runat="server">
- <Services>
- <asp:ServiceReference Path="~/TimeService.svc" />
- </Services>
- </asp:ScriptManager>
当处理上面的标记时,ScriptManager控件将触发器额外的请求用以生成和下载指定的WCF服务的JavaScript代理类。然后,客户端页面将使用这个代理类实现相应的调用。
注意到,代理类的名字是根据WCF服务的命名空间进行命名的,具体是由ServiceContract属性的Namespace参数进行声明的。如果你保留此参数为其缺省值(即 Tempuri.org),那么该代理类的名字为Tempuri.org.TimeService。
第二步,我们使用下列JavaScript来调用前面WCF服务中定义的方法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">开发中调用</span><span class="style1" lang="EN-US">
WCF</span><span- class="style1">服务<br />
- </span>
- </div>
- </form>
- <input id="Button1" type="button" value="取得当前服务器端时间"
onclick="getTime()" />- <div id="lblCurrentTime">
- </div>
- </body>
这里JavaScript代理类是由静态方法组成的,它们的名字和语法声明与WCF服务端点的原型是完全相匹配的。另外,类似于ASP.NET AJAX Web服务,每一个JavaScript代理方法也支持一组额外的参数,这是一组回调函数,用于处理调用过程中可能会出现的成功和失败,在此不再赘述。
【编辑推荐】