.NEt专家博客!
【李会军】一步一步学Silverlight 2系列(12):数据与通信之WebClient
概述
Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章带您快速进入Silverlight 2开发。
本文将介绍如何在Silverlight 2中使用Web Client进行通信。
简单示例
编写一个简单的示例,在该示例中,选择一本书籍之后,我们通过Web Client去查询书籍的价格,并显示出来,最终的效果如下:
(I"a'HRhd3U{0
*d*q X{6[J|o3LZO0
编写界面布局,XAML如下:
<GridBackground="#46461F">ITPUB个人空间8UhdsH_,n
<Grid.RowDefinitions>
^7F7V/B fs,s0<RowDefinitionHeight="40"></RowDefinition>ITPUB个人空间4X C5PBjb:P QI{
<RowDefinitionHeight="*"></RowDefinition>
e:GK}\0<RowDefinitionHeight="40"></RowDefinition>
'V:i"P Ld ?X0</Grid.RowDefinitions>ITPUB个人空间 lK:yO`'_
<Grid.ColumnDefinitions>
,~ B:t P!r;} ]E]0<ColumnDefinition></ColumnDefinition>ITPUB个人空间2Jk,jm^hh
</Grid.ColumnDefinitions>ITPUB个人空间.o:eN#kE
<BorderGrid.Row="0"Grid.Column="0"CornerRadius="15"ITPUB个人空间+d*U Cp{h
Width="240"Height="36"
5F4mVzF[\bTc0Margin="20 0 0 0"HorizontalAlignment="Left">ITPUB个人空间:^EwC.\;H
<TextBlockText="书籍列表"Foreground="White"ITPUB个人空间+r-@d9~/INu|
HorizontalAlignment="Left"VerticalAlignment="Center"
-[ }/hEHY!L&[J0Margin="20 0 0 0"></TextBlock>ITPUB个人空间a#P&N%d'B }q;x
</Border>
"x u A]3aDb0<ListBoxx:Name="Books"Grid.Row="1"Margin="40 10 10 10"
.l-\_l$o F0SelectionChanged="Books_SelectionChanged">
)T4t(J m7S#ws^0<ListBox.ItemTemplate>
~;hUukpybj$`1f0E0<DataTemplate>
.Z3n r8m%Cu1I0<StackPanel>ITPUB个人空间)hwc4e9}3s ?6c H
<TextBlockText="{BindingName}"Height="32"></TextBlock>
M KSzu#G}0</StackPanel>
,b:|mRWHe0</DataTemplate>
%GRC8qum5F)t Sk#}0</ListBox.ItemTemplate>ITPUB个人空间7w"vh"J@qG5G
</ListBox>ITPUB个人空间dKK ["Y'x0c3o
<BorderGrid.Row="2"Grid.Column="0"CornerRadius="15"
a2up!o"Px \ Q0Width="240"Height="36"Background="Orange"
"mA.Tb0{0Margin="20 0 0 0"HorizontalAlignment="Left">ITPUB个人空间\~o p#_@;p?
<TextBlockx:Name="lblPrice"Text="价格:"Foreground="White"
(on!Ui S w;kck:j0R0HorizontalAlignment="Left"VerticalAlignment="Center"
5\{ i2KG&zG-JM0Margin="20 0 0 0"></TextBlock>
.BM8z1Nppi2c0</Border>
\c0~YyL(l0</Grid>
为了模拟查询价格,我们编写一个HttpHandler,接收书籍的No,并返回价格:
public classBookHandler:IHttpHandlerITPUB个人空间*L Z-c;mR8m?f
{
7wSnZaQ0public static readonly string[] PriceList =new string[] {ITPUB个人空间 |sTuE)Aa
"66.00",ITPUB个人空间0pvmjI6T
"78.30",
IR Rb?)s%Swb'j0"56.50",ITPUB个人空间}M4o8n\$E
"28.80",ITPUB个人空间i(UZ JS!T
"77.00"ITPUB个人空间Q2\i*fn? u8{T
};ITPUB个人空间L:aYxy5{$[
public voidProcessRequest(HttpContextcontext)ITPUB个人空间.ZL:X*Ii)I
{ITPUB个人空间(d'kC ]+Aj$y
context.Response.ContentType ="text/plain";
+f5]1u%Ms?@0context.Response.Write(PriceList[Int32.Parse(context.Request.QueryString["No"])]);ITPUB个人空间&fy.}@1l`}
}ITPUB个人空间w {9I6wM
6X#Jd5wc5r,mE0public boolIsReusableITPUB个人空间wc(Y%Q6t$w3]
{
DU!SPd9?0getITPUB个人空间.]/_vq*qZ*~^
{ITPUB个人空间Fu[+M,zk$T
return false;
6r-K%k kz:tcuNR0}ITPUB个人空间!Z{,xD:t9CW4YN|
}ITPUB个人空间V+P/z,R^L4f
}
在界面加载时绑定书籍列表,关于数据绑定可以参考一步一步学Silverlight 2系列(11):数据绑定。
voidUserControl_Loaded(objectsender,RoutedEventArgse)ITPUB个人空间 kPC6Lf9l{0?p4nV'R
{
:i5t$e s'O(L0List<Book> books =newList<Book>() {ITPUB个人空间LC7` m2SOd4qFaD
newBook("Professional ASP.NET 3.5"),ITPUB个人空间1nkZg-Nw+Umx
newBook("ASP.NET AJAX In Action"),ITPUB个人空间 x2z)A%O"w
newBook("Silverlight In Action"),
&Z9b,_;o.O'Rt-B0newBook("ASP.NET 3.5 Unleashed"),
'u"l @M.r,Z1LV0newBook("Introducing Microsoft ASP.NET AJAX")
&fX1FJ+s0};
/_U.E7y^b0
2CM&y+J s/k(Nyd0J0Books.ItemsSource = books;ITPUB个人空间E Ko@yX ]
rH5B&_q)U0}
接下来当用户选择一本书籍时,需要通过Web Client去获取书籍的价格,在Silverlight 2中,所有的网络通信API都设计为了异步模式。在声明一个Web Client实例后,我们需要为它注册DownloadStringCompleted事件处理方法,在下载完成后将会被回调,然后再调用 DownloadStringAsync方法开始下载。
voidBooks_SelectionChanged(objectsender,SelectionChangedEventArgse)
v|pJ S i0{