技术开发 频道

在ASP.NET3.5 AJAX开发中调用WCF服务


五、 调用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。在本例中,我们的定义如下所示:
[ServiceContract(Namespace="Samples.Services")]

    第二步,我们使用下列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代理方法也支持一组额外的参数,这是一组回调函数,用于处理调用过程中可能会出现的成功和失败,在此不再赘述。
0
相关文章