在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:
这里JavaScript代理类是由静态方法组成的,它们的名字和语法声明与WCF服务端点的原型是完全相匹配的。另外,类似于ASP.NET AJAX Web服务,每一个JavaScript代理方法也支持一组额外的参数,这是一组回调函数,用于处理调用过程中可能会出现的成功和失败,在此不再赘述。<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>
0
相关文章
