Atlas
给我们提供了一种非常简单的方式去调用web service,大大的简化了我们开发的复杂性。在Atlas中标准的调用web service方法是在页面中添加一个ScriptManager,然后将所需的web service添加到Services Template下,如:<atlas:ScriptManagerID="scriptManager"runat="server"EnableScriptComponents="true"
<Services>
<atlas:ServiceReferencePath="~/atlas/samples/services/SimpleService.asmx"/>
</Services>
</atlas:ScriptManager>
这样我们就可以通过如下javascript方法调用到远程的web service了
requestSimpleService = Quickstart.Samples.SimpleService.EchoString(
document.getElementById('inputName').value, //params
OnComplete, //Complete event
OnTimeout //Timeout event
);
这个例子可以在atlas doc工程中找到,非常简单。然而,当我们需要在页面加载的时候调用web service的时候,就可能会遇到一定的麻烦了。在atlas doc的示例中也有这个例子,它是通过atlas 扩展的xml-script 客户端开发模式来调用,即如下代码:
<scripttype="text/xml-script">
<page xmlns:script="http://schemas.microsoft.com/xml-script/2005">
<components>
<application id="application" load="OnApplicationLoad" />
</components>
</page>
</script>
这样我们就可以写一个名为OnApplicationLoad的javascript函数,在函数中去调用web service,同样非常方便。但是,当我们想用页面的ClientScript.RegisterStartupScript方法给页面添加一个加载时自动调用web service的时候,那麻烦就来了,它会提示你,要调用的web service类型未定义。在保证目标web service存在,ServiceReference引用也添加进来的情况下,为什么会出现这样的错误呢?一种可能是web service还没有被注册。因为我们用RegisterStartupScript注册javacript的,那么是不是这里注册的代码在atlas客户端代码前执行的?没错,问题就出在这里。用Fiddler调试页面请求的过程可以看到有这样一个请求atlas/atlas/samples/services/SimpleService.asmx/js,它返回的代码如下:
Type.registerNamespace('Quickstart.Samples');
Quickstart.Samples.SimpleService=new function() {
this.path = "http://localhost:2236/atlas/atlas/samples/services/SimpleService.asmx";
this.appPath = "http://localhost:2236/atlas/";
var cm=Sys.Net.ServiceMethod.createProxyMethod;
cm(this,"EchoString","s");
}
可以看出,这段代码就是atlas自动帮我们注册了web service的引用类型,没有这段类型定义,客户根本就没有我们
凡是有该标志的文章,都是该blog博主Caoer(草儿)原创,凡是索引、收藏
、转载请注明来处和原文作者。非常感谢。