Atlas学习手记(8):调用本地Web Service简单介绍

Atlas对于调用Web Service作了很好的封装,使得我们用JS调用Web Service的工作变得非常的简单,只需要使用WebServiceName.WebMethod()就可以完成调用。本文将通过两个简单的例子来说明这一内容。

主要内容

1.调用简单的Web Service

2.传递复杂类型的数据

 

Atlas对于调用Web Service作了很好的封装,使得我们用JS调用Web Service的工作变得非常的简单,只需要使用WebServiceName.WebMethod()就可以完成调用。本文将通过两个简单的例子来说明这一内容。

一.调用简单的Web Service

这个例子中,我们调用Web Service来返回一个字符串,首先创建一个简单的Web Service,并编写一个接受字符串类型参数的Web Method

[WebMethod]

public string EchoString(string s)

{
    
return "Hello : " + s;
}

创建Web Page,并且添加ScriptManager到页面中,并且在ServiceReference子控件中引入需要的Web Service

<atlas:ScriptManager ID="scriptManager" runat="server" EnableScriptComponents="true" >

    
<Services>

        
<atlas:ServiceReference Path="SimpleWebService.asmx" />

    
</Services>

</atlas:ScriptManager>

下面我们就可以在JS中调用Web Service了,注意EchoString方法只有一个参数,这里我们传递了两个,第一个显然是EchoString方法应有的参数,第二个OnComplete则调用方法成功返回时的Callback方法:

<script type="text/javascript" language="JavaScript">

    
function OnbuttonGo_click() 

    
{

        
// Call script proxy passing the input element data

        requestSimpleService 
= SimpleWebService.EchoString(

            document.getElementById('inputName').value,       
//params

            OnComplete    
//Complete event

            );

        
return false;

    }


 

    
function OnComplete(result) 

    
{

        alert(result);

    }


</script>

编译运行后:

调用:

二.传递复杂类型的数据

上面的例子中,我们只是做了一个最简单的调用Web Service的示例,而实际应用中我们遇到的类型会更加复杂,下面再看一个例子,它将返回一个我们自定义的类型,首先定义一个纯数据类Animal,它不带有操作:

public class Animal

{
    String _name;

    String _color;

    
public String Name

    
{
        
get return _name; }

        
set { _name = value; }
    }


    
public String Color

    
{
        
get return _color; }

        
set { _color = value; }
    }

}

编写Web Service,接收到该复杂类型后直接返回:

[WebMethod]

public Animal EchoAnimal(Animal a)

{
    
return a;
}

创建Web Page,并且添加ScriptManager到页面中,并且在ServiceReference子控件中引入需要的Web Service

<atlas:ScriptManager runat="server" ID="scriptManager">

    
<Services>

        
<atlas:ServiceReference Path="ComplexWebService.asmx" />

    
</Services>

</atlas:ScriptManager>

提供给用户输入的界面:

<h3>

    Name:
<input id="inputName" />

    Color:
<input id="inputColor" />

    
<input id="buttonGo" type="button" value="GO" onclick="return OnbuttonGo_click()" />

</h3>

现在就可以添加相应的JS了,把返回的结果Alert出来:

<script type="text/javascript" language="JavaScript">

    
function OnbuttonGo_click() 

    
{
        
//Call script proxy passing the input element data

        
var i1 = document.getElementById('inputName');

        
var i2 = document.getElementById('inputColor');

        
var object = new Animal();

        object.Name 
= i1.value;

        object.Color 
= i2.value;


        requestComplexService 
= ComplexWebService.EchoAnimal(

            object,         
//params

            OnComplete     
//Complete eventt

            );

        
return false;

    }


    
function OnComplete(result) 

    
{
        alert(
"Name= " + result.Name + " Color= " + result.Color);

    }


</script>

编译运行后:

调用:

可以看到,在Atlas中调用本地Web Service非常的简单,对于调用远程的Web Service又有一些不同,后面会说到,在实际使用中,我们还需要考虑错误、超时等的一些处理[文中的示例来源于Atlas官方网站]。

完整示例下载:http://files.cnblogs.com/Terrylee/WebServiceDemo.rar

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2006-07-30 13:56 TerryLee 阅读(4746) 评论(25)  编辑 收藏 网摘 所属分类: [08]  Web开发[01]  .NET大本营

  回复  引用  查看    
#1楼 2006-07-30 20:58 | 山中豹      
javascript脚本
var object = new Animal();
不知道其中new Animal()是如何实现的,Animal.cs可是定义在服务端啊。
能否解说一下其中的原理?
  回复  引用  查看    
#2楼 2006-07-30 21:41 | Ring      
TerryLee介绍的很好! 也支持一个!
  回复  引用  查看    
#3楼 2006-07-30 22:06 | Dflying Chen      
调用远程的Web Service非常复杂(指Web Service Bridge,ASBX相关),且目前没有什么好的文档,希望能看到你的介绍和想法。
  回复  引用  查看    
#4楼 2006-07-30 22:10 | Dflying Chen      
@山中豹

这里new出来的并不是服务器端的Class。

Web Service的proxy通过在ScriptManager中引用到了客户端,该proxy中还包含有Atlas自动生成的服务器端C# Class在客户端的JavaScript Mashup。上面代码中的new Animal实际上是调用这个客户端的Mashup创建了客户端JavaScript对象,然后在提交回服务器的时候Atlas会自动将其转换为服务器端的C#对象并进行后续操作。

希望有所帮助。
  回复  引用  查看    
#5楼 [楼主]2006-07-31 08:01 | TerryLee      
@Ring
谢谢支持:-)
  回复  引用  查看    
#6楼 [楼主]2006-07-31 08:03 | TerryLee      
@山中豹
Dflying Chen的解答很完美^_^

@Dflying Chen
谢谢
对于调用远程Web Service确实有一定的复杂性,我还得再研究一下。初学Atlas,以后还得多多请教你啊,呵呵:-)
  回复  引用  查看    
#7楼 2006-07-31 15:22 | 木独朱      
多谢啊,也刚刚接触这冬冬,讲得通俗易懂,不错。有个疑问,如果不是引用webservice而是某个模块(类),如何引用?如下面代码如何更改?

<Services>
<atlas:ServiceReference Path="ComplexWebService.asmx" />
</Services>
  回复  引用  查看    
#8楼 [楼主]2006-07-31 15:38 | TerryLee      
@木独朱

这里不需要注册,Services只是注册Web Service。
  回复  引用    
#9楼 2006-08-17 16:51 | 1111 [未注册用户]
一个问题请教:
在一个项目中两个网站相互关联,webservice调用是怎样实现的呢?
  回复  引用    
#10楼 2006-09-14 10:58 | xfary [未注册用户]
为什么我一运行就提示Animal没有定义的错误呢!
  回复  引用  查看    
#11楼 [楼主]2006-09-14 11:30 | TerryLee      
@xfary
需要有Animal这个类,在服务端
  回复  引用    
#12楼 2006-09-14 13:53 | xfary [未注册用户]
@TerryLee
我已经定义了这么一个类啊,是放在App_Code文件夹下面的,可是就是不知道怎么会事,提示Animal没有定义的错误呢!
  回复  引用  查看    
#13楼 2006-09-15 06:44 | 戴南      
@xfary
Imports System.Web
加入这个似乎就是可以了的了

  回复  引用    
#14楼 2006-09-15 16:13 | Shari [未注册用户]
戴南 :
在哪儿加入Imports System.Web 呀?

  回复  引用    
#15楼 2006-09-26 14:42 | Ben[匿名] [未注册用户]
请问从父窗口打开的子窗口页面客户端是不是不能用atlas调用本地webservice??
  回复  引用    
#16楼 2006-10-05 00:35 | 玩啊! [未注册用户]
不错,通俗易懂

  回复  引用    
#17楼 2006-10-18 11:02 | birdit [未注册用户]
我也遇到与 xfary 类似的问题,自定义了一个类,然后再 javasricpt 中 new 这个类的对象,在本机测试可以,在内网一台刚装的服务器上测试也可以,但部署到一台正式的服务器上运行就不行,总提示这个类未定义。真的很奇怪,是否缺少了什么,请各位大大解答下。
  回复  引用  查看    
#18楼 [楼主]2006-10-18 21:39 | TerryLee      
@birdit
这个问题我真的不知道是什么了,呵呵,问问老赵吧:-)
  回复  引用    
#19楼 2006-10-23 09:25 | 品雨凉秋 [未注册用户]
我在
javascript脚本
var object = new Animal();
也是出为定义的错误,是什么原因呢
  回复  引用  查看    
#20楼 [楼主]2006-10-23 13:01 | TerryLee      
@品雨凉秋
研究ASP.NET AJAX吧

  回复  引用    
#21楼 2007-01-17 00:38 | snyod [未注册用户]
代表党(.NET平台)感谢您.
全部收藏....................
  回复  引用    
#22楼 2007-01-30 18:52 | 浩蓝 [未注册用户]
requestComplexService = ComplexWebService.EchoAnimal

requestComplexService是什么意思?




  回复  引用  查看    
#23楼 [楼主]2007-02-07 17:03 | TerryLee      
@浩蓝
晕,一个变量而已

记录返回的结果
  回复  引用    
#24楼 2007-04-21 11:25 | Gavin [未注册用户]
错误 1 元素“ScriptManager”不是已知元素。原因可能是网站中存在编译错误。 C:\Inetpub\wwwroot\WebServiceDemo\Default.aspx 9 12 C:\...\WebServiceDemo\
错误 2 验证 (XHTML 1.0 Transitional): 不支持元素“services”。 C:\Inetpub\wwwroot\WebServiceDemo\Default.aspx 10 10 C:\...\WebServiceDemo\
错误 3 元素“ServiceReference”不是已知元素。原因可能是网站中存在编译错误。 C:\Inetpub\wwwroot\WebServiceDemo\Default.aspx 11 20 C:\...\WebServiceDemo\
错误 4 未能加载文件或程序集“Microsoft.Web.Atlas”或它的某一个依赖项。系统找不到指定的文件。





标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-08-15 08:05 编辑过
Google站内搜索

相关文章:

相关链接: