.NEt专家博客!

【李会军】一步一步学Silverlight 2系列(15):数据与通信之ASMX

上一篇 / 下一篇  2008-04-11 20:07:00 / 个人分类:经典文章

概述

Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章将从Silverlight 2基础知识、数据与通信、自定义控件、动画、图形图像等几个方面带您快速进入Silverlight 2开发。

本文将简单介绍在Silverlight 2中如何与ASMX进行通信。

简单示例

本文的示例非常简单,其过程也跟我们在一步一步学Silverlight 2系列(14):数据与通信之WCF中差不多,我们仍然显示一个最新随笔的列表,最终完成后效果如下所示:ITPUB个人空间;P ??*@*|5{

0Od`"{:clm0

定义一个业务实体Post。

public classPost
(^8ULM-A9@b2k0
{ITPUB个人空间c'wNW s
public intId {get;set; }ITPUB个人空间qH2A blY

B-T^H Qe,p8R0public stringTitle {get;set; }ITPUB个人空间N+b_ _ \ s2LF r/?J

.l7s [c8U%^Bai9p0public stringAuthor {get;set; }ITPUB个人空间%U@fz)JG
}

在Web项目中添加一个Web Service文件,命名为BlogService.asmx

实现该服务,定义一个GetPosts方法:

public classBlogService:WebService
td'i8HZn#v?S0
{
GtT)V*EdgH0[WebMethod]
w-PM&{"n4i TjK0publicPost[] GetPosts()
g|se+}T ZxX0{ITPUB个人空间X F r4uWu8s O |
List<Post> posts =newList<Post>()ITPUB个人空间}M/R5i^O'T
{ITPUB个人空间sMj,I8tHe9bb"T
newPost{ Id=1, Title="一步一步学Silverlight 2系列(13):数据与通信之WebRequest", Author="TerryLee"},
eVhNPx0newPost{ Id=2, Title="一步一步学Silverlight 2系列(12):数据与通信之WebClient", Author="TerryLee"},ITPUB个人空间s7C.YX3oai8mB
newPost{ Id=3, Title="一步一步学Silverlight 2系列(11):数据绑定", Author="TerryLee"},ITPUB个人空间 ]q|p%RExT
newPost{ Id=4, Title="一步一步学Silverlight 2系列(10):使用用户控件", Author="TerryLee"},
I GA~,X"xm)eMBU0newPost{ Id=5, Title="一步一步学Silverlight 2系列(9):使用控件模板", Author="TerryLee"},
` Qa"SQ(j*v0newPost{ Id=6, Title="一步一步学Silverlight 2系列(8):使用样式封装控件观感", Author="TerryLee"}ITPUB个人空间9Pv2R6n)a%M$_ x
};ITPUB个人空间[ \3n nB2u'I.V

on;ts*g1X5^zH0returnposts.ToArray();
&Hq*Y m@8Y0}ITPUB个人空间 f0e&gjI `Uu$R
}

同样设置Web Development Server的端口号为一个固定值,这里设为8081,然后在浏览器中测试服务是否正确:
@ gZN.Nwv({0ITPUB个人空间(w"G,JG {U n F"nZ Y [
点击调用后测试服务正确
+OvS[4vd,zc(y#?0
%f PPX\p,d[0在Silverlight项目中,添加对服务引用,
5C J6S5B4YM6Wr*U&?K AJ)L0ITPUB个人空间N+zXED X!C4OK C(e*?
使用对象浏览器查看一下生成客户端代理类中的对象:ITPUB个人空间}'l}:d*M

Y H#o I jY"Y0

编写展示界面,XAML如下,与上一篇中的示例一样:

<GridBackground="#46461F">ITPUB个人空间GMoax	Ec
<
Grid.RowDefinitions>
)R0` m\FU0<
RowDefinitionHeight="40"></RowDefinition>ITPUB个人空间;y^1p7H&e
<
RowDefinitionHeight="*"></RowDefinition>ITPUB个人空间DB&D!nspIoqN
</
Grid.RowDefinitions>
S)U }\-JZI0<
Grid.ColumnDefinitions>ITPUB个人空间y"EJv-\{x/p O
<
ColumnDefinition></ColumnDefinition>ITPUB个人空间)iS$x"S0f%])R"v \ W*J
</
Grid.ColumnDefinitions>ITPUB个人空间PN-A"Ifk6jHg
<
BorderGrid.Row="0"Grid.Column="0"CornerRadius="15"
9Y {d8a4g;E g(YT0
Width="240"Height="36"Background="Orange"
U _ rF E-O0
Margin="20 0 0 0"HorizontalAlignment="Left">
/Qf @/| H B0<
TextBlockText="最新随笔"Foreground="White"ITPUB个人空间?t2DU-uJc5z
HorizontalAlignment="Left"VerticalAlignment="Center"
R^$c/d5D$| v0
Margin="20 0 0 0"></TextBlock>ITPUB个人空间] Z lz1k[
</
Border>ITPUB个人空间B-B+k8qM0p
<
ListBoxx:Name="Posts"Grid.Row="1"Margin="40 10 10 10">
2N k7u(ly'`}}A0<
ListBox.ItemTemplate>ITPUB个人空间o)j$F-h6qW
<
DataTemplate>ITPUB个人空间!c9P8diE?+L6n\? g
<
StackPanelOrientation="Horizontal">ITPUB个人空间.] v{J)iJ
<
TextBlockText="{BindingId}"Height="40"Foreground="Red"></TextBlock>
1LR*mLom&mZN5T;X0<
TextBlockText="{BindingTitle}"Height="40"></TextBlock>ITPUB个人空间 Q1@DT,@Y$y#Ix
<
TextBlockText="{BindingAuthor}"Height="40"Foreground="Orange"></TextBlock>ITPUB个人空间,y/j \:e g6l4\!b&MR
</
StackPanel>
m3v{*~6lmR0</
DataTemplate>ITPUB个人空间t,zB%@-[l
</
ListBox.ItemTemplate>ITPUB个人空间/i-x&p g|~@
</
ListBox>
Xb1aMoy0^J ~0</
Grid>

实现调用ASMX,并进行数据的绑定。仍然采用异步模式,所使用的方法如上图中红色框中的部分。过程与WCF通信差不多,只不过不再需要指定Bingding等信息:

public partial classPage:UserControl
xacT,m#F[0
{ITPUB个人空间 vH q[aK1a$j@A
publicPage()
7DL5y7[ UHQTg0{ITPUB个人空间k!W^D"B
InitializeComponent();
!e/c:@]i U"p0}ITPUB个人空间)]%\2es3iN{$Y'T
ITPUB个人空间~t2?$ZD-vl ??
private voidUserControl_Loaded(objectsender,RoutedEventArgse)ITPUB个人空间lgWL'z)i F]5]5l
{
bv+lm/t e0BlogServiceSoapClientclient =newBlogServiceSoapClient();ITPUB个人空间9q M0Rn0[+`V7x1`
client.GetPostsCompleted +=newEventHandler<GetPostsCompletedEventArgs>(client_GetPostsCompleted);
OY x4v y%v0client.GetPostsAsync();
6|Xgvj#m-^0}ITPUB个人空间V-OL1f&wC
ITPUB个人空间C*vd\e;KV-I"P7O
voidclient_GetPostsCompleted(objectsender,GetPostsCompletedEventArgse)ITPUB个人空间F^l"`f2Q7S
{
Tyn1nv6C"[Z0if(e.Error ==null)ITPUB个人空间;R!F x?P7I
{ITPUB个人空间F2s}v&aW3`-D
Posts.ItemsSource = e.Result;ITPUB个人空间u*|'N4]K1\^ V
}ITPUB个人空间w4N8K Q&ZF,R
}ITPUB个人空间 f2|u'z8rvc
}

一个完整的Silverlight 2中调用ASMX的示例就完成了,运行后效果如下:


)R*s^s%c!_r9E9K0

结束语

本文简单介绍了在Silverlight 2中如何调用ASMX,你可以从这里下载示例代码。

作者:TerryLeeITPUB个人空间.Y5m*jDh;s
出处:http://terrylee.cnblogs.com

,N+v w5wF0

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-14  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 48791
  • 日志数: 1223
  • 影音数: 7
  • 文件数: 1
  • 建立时间: 2008-01-04
  • 更新时间: 2008-10-13

RSS订阅

Open Toolbar