概述
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个人空间#OMlK)K;[6HS

;JG6B9Fx:q6ts3X0
定义一个业务实体Post。
public classPostITPUB个人空间f*g DGs/k#Y
{ITPUB个人空间!sY%K_F+i:wO
public intId {get;set; }ITPUB个人空间n$_a'oka8bdZ
;c;R&kE9`
I KHU0public stringTitle {get;set; }
q8m
@
[p!Hc)U+dh0
/?V5v,`|)qr4m0^)}0public stringAuthor {get;set; }
CDi'uz-h0}
在Web项目中添加一个Web Service文件,命名为BlogService.asmx

实现该服务,定义一个GetPosts方法:
public classBlogService:WebServiceITPUB个人空间XVQ1k8pR
j*O
{
s!U[}?!K Hx0[WebMethod]ITPUB个人空间0fhovmr"ub
publicPost[] GetPosts()ITPUB个人空间-Tqn8r6M1K%]
{ITPUB个人空间?#s%dM0_#W
List<Post> posts =newList<Post>()ITPUB个人空间u*n-Ij#U&K@%H
{
Me_&d
i0newPost{ Id=1, Title="一步一步学Silverlight 2系列(13):数据与通信之WebRequest", Author="TerryLee"},
,p
y/U6TD$SU"I0newPost{ Id=2, Title="一步一步学Silverlight 2系列(12):数据与通信之WebClient", Author="TerryLee"},ITPUB个人空间ARRVM/H[
newPost{ Id=3, Title="一步一步学Silverlight 2系列(11):数据绑定", Author="TerryLee"},
"u*B1rr3wN^%n|7`0newPost{ Id=4, Title="一步一步学Silverlight 2系列(10):使用用户控件", Author="TerryLee"},ITPUB个人空间#koI&p ] da-k
newPost{ Id=5, Title="一步一步学Silverlight 2系列(9):使用控件模板", Author="TerryLee"},
3Xjv(}7M8T$O0newPost{ Id=6, Title="一步一步学Silverlight 2系列(8):使用样式封装控件观感", Author="TerryLee"}ITPUB个人空间.] k yV b8d
};ITPUB个人空间f;y;I7Hx)VO?U
ITPUB个人空间lTw,H
`5FT @
K
returnposts.ToArray();ITPUB个人空间j.f_/_3?j
}
*YMC`*H2NyF x5b0}
同样设置Web Development Server的端口号为一个固定值,这里设为8081,然后在浏览器中测试服务是否正确:ITPUB个人空间`!bNAU"K
ITPUB个人空间)`7P m!o,z+K7s*A
点击调用后测试服务正确ITPUB个人空间p0A1]? Jl$hS+x
x4Ca*C
ITPUB个人空间b!D$C)eZ Jw r
在Silverlight项目中,添加对服务引用,ITPUB个人空间0~+Ur1O3Z+g

}"_3v h@p8k!D@:@$L0使用对象浏览器查看一下生成客户端代理类中的对象:ITPUB个人空间
d@F$on&_`]

*q{s8e?8G0
编写展示界面,XAML如下,与上一篇中的示例一样:
<GridBackground="#46461F">ITPUB个人空间9^.M%c6yh\t
<Grid.RowDefinitions>ITPUB个人空间@nIZh,I W?;R
<RowDefinitionHeight="40"></RowDefinition>
(E'|9h&\;d&xy:w*j0<RowDefinitionHeight="*"></RowDefinition>
!l2@5N8D]~_A0</Grid.RowDefinitions>ITPUB个人空间2w.i Niz3rP#h
<Grid.ColumnDefinitions>
/Dr/S1?^yD.hK0<ColumnDefinition></ColumnDefinition>
+c
{
T/L?0</Grid.ColumnDefinitions>
P"bS0K_(i0<BorderGrid.Row="0"Grid.Column="0"CornerRadius="15"ITPUB个人空间'zq"ez9^-@'J
Width="240"Height="36"Background="Orange"ITPUB个人空间i1L YYFcL4fO;D
Margin="20 0 0 0"HorizontalAlignment="Left">ITPUB个人空间Z?N f*Zcc,m
<TextBlockText="最新随笔"Foreground="White"
(u'J
YT#E6J/E0HorizontalAlignment="Left"VerticalAlignment="Center"
i&?n/p(p8O0Margin="20 0 0 0"></TextBlock>ITPUB个人空间
s6i0L`]]V0gW
</Border>ITPUB个人空间Ai1I6|
F
<ListBoxx:Name="Posts"Grid.Row="1"Margin="40 10 10 10">ITPUB个人空间E:qo pm7Y
z
<ListBox.ItemTemplate>
Tj3{ |$GjJ%R0<DataTemplate>
m.R Z$C'yQcCj4X0<StackPanelOrientation="Horizontal">ITPUB个人空间S1SgQ4R)jjwbi;^
<TextBlockText="{BindingId}"Height="40"Foreground="Red"></TextBlock>ITPUB个人空间?!|;@W6f S~o&`.w^a
<TextBlockText="{BindingTitle}"Height="40"></TextBlock>ITPUB个人空间 ^2I~'FU R7I'~
<TextBlockText="{BindingAuthor}"Height="40"Foreground="Orange"></TextBlock>
cyGJ_\E0</StackPanel>
A ~B
?&nQ)A6J0</DataTemplate>ITPUB个人空间TFb
zpM,{sO
</ListBox.ItemTemplate>ITPUB个人空间rnfEv-mV0_
</ListBox>ITPUB个人空间;i
fO_T*B'H
</Grid>
实现调用ASMX,并进行数据的绑定。仍然采用异步模式,所使用的方法如上图中红色框中的部分。过程与WCF通信差不多,只不过不再需要指定Bingding等信息:
public partial classPage:UserControlITPUB个人空间%[AW8Jm1ar'wY;}S
{ITPUB个人空间O'km6R0{;f;@M
publicPage()ITPUB个人空间
J"p'PJ5H4_,F
{ITPUB个人空间)P,xNiKM5u"^rz
InitializeComponent();ITPUB个人空间P;f(X%ga%{pRHK
}
"`nU7U5N`)]!z)|(W0ITPUB个人空间
[&I
D R;hU
private voidUserControl_Loaded(objectsender,RoutedEventArgse)ITPUB个人空间7q/k7|G#sB*S
{ITPUB个人空间#O;?kd:z\FIS
BlogServiceSoapClientclient =newBlogServiceSoapClient();
+dm7Q
n;W\0client.GetPostsCompleted +=newEventHandler<GetPostsCompletedEventArgs>(client_GetPostsCompleted);
[2km.c7|\Y0client.GetPostsAsync();ITPUB个人空间{@!Y'gS
}
O1o^-p8oVGR0ITPUB个人空间:I5Z/hca0g`
voidclient_GetPostsCompleted(objectsender,GetPostsCompletedEventArgse)
v#pjt*wkS}#ysT0{ITPUB个人空间b
aA$oSYx
if(e.Error ==null)
3fOkk6PwI-{?;A0{
N4AFO ^ N(Y0Posts.ItemsSource = e.Result;
`v"Y-v-W%e2~%b,s0}
&F D
^W(bm c0}
m{'{FT|F!rD0}
一个完整的Silverlight 2中调用ASMX的示例就完成了,运行后效果如下:
ITPUB个人空间R.I g;CrA9`4o-w结束语
本文简单介绍了在Silverlight 2中如何调用ASMX,你可以从这里下载示例代码。
ITPUB个人空间+TK_.Wis