下面让我们来了解一下flash中的Web服务类。

Web 服务类存在于mx.services包中。为了能够在运行时使用 Web 服务类,WebServiceClasses 组件必须位于 FLA 文件的库中。Web服务类包含四个关键的类:WebService 类、PendingCall 类、Log 类、SOAPCall 类。其中,WebService 类、PendingCall 类与ws调用直接相关。通过WebService 类的构造器可以在Flash Player中返回指定WebService对象。如下面所示


Var myWebServiceObject:WebService = new WebService(wsdlURI);


参数wsdlURI指向引用的Web服务地址,比如“​​http://localhost/ws/test.asmx?wsdl”然后使用PendingCall​​ 类型的回调对象,在PendingCall回调对象的onResult方法中处理ws中指定方法的结果。比如:


var op_1:PendingCall=myws. hello ();

op_1.onResult= hello;


下面我们还是用一个例子来看一看Web服务类是怎么工作的。

说明:这个例子演示了在ws接受来自客户端的数字简单类型、日期和时间简单类型、bool类型、名称和字符串简单类型以及Array类型参数并返值。

首先还是构造服务器端的ws。

打开一个文本文件,声明一个WebService 处理指令

1、 如下:

<%@ WebService Language="c#" Codebehind="sample2.asmx.cs" Class="wsLearn.sample2" %>

命名为:sample2.asmx,放到虚拟目录​​http://localhost/ws/下。​

Language 属性指示开发 XML Web services 所使用的编程语言。可以使用任何与 .NET 兼容的语言(如 Visual Basic .NET 或 Visual C#)来创建 XML Web services。与 .asmx 页关联的支持代码文件由 Codebehind 属性来指示。Class 属性指示支持代码文件中用来实现 XML Web services 功能的类。

2、 新建一个cs文档:写入如下代码:

/* ======================================================================


C# Source File -- Created with SAPIEN Technologies Primalcode 3.0


NAME: sample2.asmx.cs


AUTHOR: JimLee , Dxl School

DATE : 2004-10-7


COMMENT: 这个例子演示了在ws接受来自客户端的数字简单类型、日期和时间简单类

型、bool类型、名称和字符串简单类型以及Array类型参数并返值。


====================================================================== */


using System;

using System.Web;

using System.Web.Services;


namespace wsLearn{

[WebService(Namespace="​​http://www.dxlschool.com/ws/",Description="例2,演示ws方法的传值",Name="s2")​​ ]

public class sample2:System.Web.Services.WebService{

public sample2(){

//

}


[WebMethod]

public string GetUserName(string tName){

return "你好,"+tName;

}

}

}


注意下列几处代码:

[WebService(Namespace="​​http://www.dxlschool.com/ws/",Description="例2,演示ws方法的传值",Name="s2")​​ ]

WebService 属性提供以下属性:

Description - 此属性的值包含描述性消息,此消息将在 XML Web services 的说明文件(例如服务说明和服务帮助页)生成后显示给 XML Web services 的潜在用户。

Name - 此属性的值包含 XML Web services 的名称。默认情况下,该值是实现 XML Web services 的类的名称。Name 属性标识 XML Web services 的 XML 限定名称的本地部分。Name 属性也用于在服务帮助页上显示 XML Web services 的名称。

Namespace - 此属性的值包含 XML Web services 的默认命名空间。XML 命名空间提供了一种在 XML 文档中创建名称的方法,该名称可由统一资源标识符 (URI) 标识。使用 XML 命名空间,可以唯一标识 XML 文档中的元素或属性。因而,在 XML Web services 的服务说明中,Namespace 被用作与 XML Web services 直接相关的 XML 元素的默认命名空间。如果不指定命名空间,就使用默认命名空间​​http://tempuri.org/​


public class sample2:System.Web.Services.WebService

类sample2继承自基类System.Web.Services.WebService,它提供了直接访问常见 ASP.NET 对象(如应用程序和会话状态的对象)的权限。需要注意的是该类必须是公共的,并且必须有一个公共的默认构造函数(不带参数的构造函数)。


[WebMethod]

通过在 Public 方法声明之前放置 WebMethod 属性可以指定在 XML Web services中可用的方法。Private 方法不能充当 XML Web services 的入口点,尽管它们可以采用相同的类并且 XML Web services 代码可以调用它们。WebMethod 属性必须应用到可用作 XML Web services 一部分的每种公共方法中。


3、 将上面的cs文件命名为sample2.asmx.cs,用csc /t:library $File$将其编译为sample2.asmx.dll,在虚拟目录​​http://localhost/ws/下新建子目录bin,将sample2.asmx.dll复制到http://localhost/ws/bin/下​

下面就可以在浏览器中测试你的ws了:​​http://localhost/ws/sample2.asmx​

或者​​http://localhost/ws/sample2.asmx​​ ?wsdl


下面让我们在flash中调用这个ws(现在它只包含一个方法GetUserName)。

1、 拖动WebSessionClasses组件到舞台上,将Web服务类包导入Fla,删除舞台上的WebSessionClasses组件的实例。

2、 拖动一个Button组件到舞台上,命名为:GetUN_bt,设置label属性为:“GetUserName”;

3、 添加如下动作脚本:

/**

ActionScript Class File -- Created with SAPIEN Technologies PrimalScript 3.0


@class wsSample_2

@package wsSample_2.as

@author JimLee

@codehint

@example

@tooltip

*/


import mx.services.*;


var myws:WebService=new WebService("​​http://localhost/ws/sample2.asmx​​ ?wsdl");


function GetUserName(result){

trace("ws返回的值为:");

trace("///////////////////////////");

trace(result);

}


this.GetUN_bt.onPress=function(){

var op_1:PendingCall=myws.GetUserName("乔狗!!");

op_1.onResult=GetUserName;

}


赫赫,一点新东西都没有,只不过在PendingCall回调的方法中加入了参数值"乔狗!!"而已,就好像使用本地方法一样爽耶!


下面,你又可以测试一下了。