Flex与.Net的WebService通信

本文介绍使用Flex通过WebService与.NET服务器进行通信的方法。重点讲解了WebService的配置、请求发送及结果处理流程,并展示了C#后台代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 紧接上一篇文章,要用flex和.Net服务器通行,除了HttpService,还有另一种方法就是WebService

WebService的方法是基于SOAP协议的。说得简单一点就是让数据自动按照SOAP的协议转成XML传输。

类似HttpService,我们可以在flex声明一个WebService
<mx:WebService id="webService"//注意id,下面要用到
wsdl="http://localhost/WebService/RosterWebService.asmx?wsdl">//WebService页面的地址
<mx:operation name="GetRoster" result="webServiceResultHandler(event)">//**重点
<mx:request>
<numberOfStudents>//请求的内容,和界面控件studentStepper的值绑定起来
{studentStepper.value}
</numberOfStudents>
</mx:request>
</mx:operation>
</mx:WebService>
和HttpService有点不同。WebService需要一个mx:operation标签定义如何访问。首先name属性定义了对方服务器上用什么函数处理,你可以在C#部分的代码找到GetRoster()。由于GetRoster函数需要一个int参数,所以下面的请求内容也必须是一个int。最后result属性定义了返回结果后用webServiceResultHandler()处理。
我们看看webServiceResultHandler的代码:
private function webServiceResultHandler(event:ResultEvent):void
{
var result:ClassData = new ClassData();
result.ClassName = event.result.ClassName;
result.TeacherName = event.result.TeacherName;
result.TeacherID = event.result.TeacherID; var students:* =
event.result.Students;
result.Students = students
as ArrayCollection;
if (result.Students == null)
{
result.Students = new ArrayCollection([students]);
}
updateUI(result);
}
基本上和HttpService是一样的。
最后就是要一个发送函数和“发送”按钮的click事件绑定,这样当你按下发送按钮才可以发送:
private function callWebServiceClassData():void
{
webService.GetRoster.send();//注意到这个webService其实就是上面定义的那个,看id即可知
}

最后是C#的部分,页面名字叫RosterWebService.asmx,但实际这个文件没有代码,真正的代码在其后台文件RosterWebService.asmx.cs上
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Web.Services;
using FlexToNet.Data;

namespace FlexToNet.WebService
{
/// <summary>
/// Summary description for RosterWebService
/// </summary>
[WebService(Namespace = "http://www.blinemedical.com")]//注意namespace和flex上要一致
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class RosterWebService : System.Web.Services.WebService//继承WebService
{

[WebMethod]//标记为WebMethod才能够通信
public ClassData GetRoster(int numberOfStudents)
{
ClassData sampleClass = new ClassData();
sampleClass.ClassName = "Science";
sampleClass.TeacherName = "Smith";
sampleClass.TeacherID = 10;
sampleClass.Students = new List<StudentData>();

for (int i = 0; i < numberOfStudents; i++)
{
StudentData studentOne = new StudentData();
studentOne.StudentID = i + 1;

if (i % 2 == 0)
studentOne.StudentName = "Denis";
else
studentOne.StudentName = "Alexey";

sampleClass.Students.Add(studentOne);
}

return sampleClass;
}
}
}

可以看到GetRoster函数并没有任何处理网络问题的代码,仅仅是接受一个参数,然后处理之后返回一个ClassData。
关键就在于[WebMethod]标记,代替了GetRoster处理了这些事情。这是C#反射功能的一个应用的典型。
另外例子中还有一个GetDataTable的函数,和上面的GetRoster原理一样,不在赘述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值