.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中差不多,我们仍然显示一个最新随笔的列表,最终完成后效果如下所示:
:CM_j+[5Z `D&ZD0
#d+Rd1Y F0

定义一个业务实体Post。

public classPostITPUB个人空间g,w(OaI:b
{ITPUB个人空间 XcqWaQ#cC
public intId {get;set; }
_:k!V;m+p Ko!I!^0ITPUB个人空间M8@ xD-x
public stringTitle {get;set; }ITPUB个人空间1G1IDp,L8h#@OSD

%p8q&WrY| IL(g'[2P0public stringAuthor {get;set; }ITPUB个人空间#XI"T:s5s%f"h
}

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

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

public classBlogService:WebService
r GH7Y!A.Y0
{ITPUB个人空间3efLS#q-Ld.b6Y G
[WebMethod]
&n {%Xu9l;K6zNje0publicPost[] GetPosts()ITPUB个人空间;`'~#sC&Y0dzwH
{ITPUB个人空间l-Gy*Js6@+H
List<Post> posts =newList<Post>()
;{5zx `\ h&?4y A i0{
5A)L eL k1z1G w0newPost{ Id=1, Title="一步一步学Silverlight 2系列(13):数据与通信之WebRequest", Author="TerryLee"},
$Z7EE(h[a+F_$q0newPost{ Id=2, Title="一步一步学Silverlight 2系列(12):数据与通信之WebClient", Author="TerryLee"},ITPUB个人空间%J%Vm2D~3t
newPost{ Id=3, Title="一步一步学Silverlight 2系列(11):数据绑定", Author="TerryLee"},ITPUB个人空间8["f2Z&]x'Rnz'y
newPost{ Id=4, Title="一步一步学Silverlight 2系列(10):使用用户控件", Author="TerryLee"},
\(ES7I {0newPost{ Id=5, Title="一步一步学Silverlight 2系列(9):使用控件模板", Author="TerryLee"},ITPUB个人空间fN'Ap|9T*]&h _8O
newPost{ Id=6, Title="一步一步学Silverlight 2系列(8):使用样式封装控件观感", Author="TerryLee"}
C-`V KS3sou2a0};
,Gv3Gc/y9lI2_0ITPUB个人空间7k8F.?(LU(l
returnposts.ToArray();
|2hE C.WT e`%v0}ITPUB个人空间{*O6s|7q5q
}

同样设置Web Development Server的端口号为一个固定值,这里设为8081,然后在浏览器中测试服务是否正确:
O8G.b~z a6FY2T&C;h0
J9s-W [ Z@0点击调用后测试服务正确ITPUB个人空间o8Cw"dJER
ITPUB个人空间Eb!?R/sZ.Y1F
在Silverlight项目中,添加对服务引用,
'Goo*\7oz Yd0
9Q2B+~'JQI2L0使用对象浏览器查看一下生成客户端代理类中的对象:ITPUB个人空间 mzK7jyS@.d P
ITPUB个人空间(eD+S3YW#M

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

<GridBackground="#46461F">ITPUB个人空间
OIdv5eH[eIj
<
Grid.RowDefinitions>
)B/J-L)~Nh_'i!`0<
RowDefinitionHeight="40"></RowDefinition>
(D7m l1^?q0<
RowDefinitionHeight="*"></RowDefinition>
q2Dc3Rp0</
Grid.RowDefinitions>
)pNlaR/s0<
Grid.ColumnDefinitions>ITPUB个人空间n|Qoy+Q*I_
<
ColumnDefinition></ColumnDefinition>ITPUB个人空间*FJKn(D#EL
</
Grid.ColumnDefinitions>ITPUB个人空间o^] X2dSV!q
<
BorderGrid.Row="0"Grid.Column="0"CornerRadius="15"
j&? ^wrs0
Width="240"Height="36"Background="Orange"
8|7Y,ll6F@6[4J0
Margin="20 0 0 0"HorizontalAlignment="Left">ITPUB个人空间H,` x4|k
<
TextBlockText="最新随笔"Foreground="White"
edb$W&v C:^0
HorizontalAlignment="Left"VerticalAlignment="Center"
mE[s!o[1|v6rG0
Margin="20 0 0 0"></TextBlock>
}B,n4RT#d~M0</
Border>ITPUB个人空间[t'S4v`6L6b
<
ListBoxx:Name="Posts"Grid.Row="1"Margin="40 10 10 10">ITPUB个人空间9|.O5use#c
<
ListBox.ItemTemplate>ITPUB个人空间\/E l9P+r
<
DataTemplate>ITPUB个人空间;o vi,@e-y
<
StackPanelOrientation="Horizontal">ITPUB个人空间)na,kZ)c t,f#UX
<
TextBlockText="{BindingId}"Height="40"Foreground="Red"></TextBlock>ITPUB个人空间2_,Z0vva _U"x6@9~+Ke
<
TextBlockText="{BindingTitle}"Height="40"></TextBlock>
UsX(PY2N0{ L0<
TextBlockText="{BindingAuthor}"Height="40"Foreground="Orange"></TextBlock>ITPUB个人空间4kD(Cta}
</
StackPanel>
(j[a4R6O2Q-Rrc \0</
DataTemplate>ITPUB个人空间M}Pg{k:FO
</
ListBox.ItemTemplate>
uBGt^b0</
ListBox>
F }O@&H0</
Grid>

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

public partial classPage:UserControl
:x+D9dgl1J0
{ITPUB个人空间[R%r {'Y0GAf9F
publicPage()
D9v7F+^y;t ]$E1m5c0{
o*ZhFL-tJnF0InitializeComponent();ITPUB个人空间9w p8W5RA@)y"F'VG
}
6H*{|Y+jYj#N0
6I6b/\o5s YN;X}0private voidUserControl_Loaded(objectsender,RoutedEventArgse)
qMe!c8I~0{ITPUB个人空间9~,ICzrv
BlogServiceSoapClientclient =newBlogServiceSoapClient();ITPUB个人空间y.^-K3]3y
client.GetPostsCompleted +=newEventHandler<GetPostsCompletedEventArgs>(client_GetPostsCompleted);
[-{ Cm Q;a1B'w0client.GetPostsAsync();
jDlj3Mu0}ITPUB个人空间hZ'\O4D

k(v/B l"CbZ2H0voidclient_GetPostsCompleted(objectsender,GetPostsCompletedEventArgse)
:bn-AvK}5t0{ITPUB个人空间.a'k2B+?:{3w!_
if(e.Error ==null)ITPUB个人空间+@ b%_wyk#].b
{ITPUB个人空间E8?J Pi;RJ f
Posts.ItemsSource = e.Result;
hcOtyW-wRXw u0}ITPUB个人空间 F%sdG:}WO
}
bC/B Oj#Qx_0}

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


6ok\'K9W&p*{0

结束语

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

作者:TerryLee
3E_&y:f!k!l0出处:http://terrylee.cnblogs.com

f:Dpbs&@/u/n R0

TAG:

 

评分:0

我来说两句

显示全部

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

日历

« 2012-02-10  
   1234
567891011
12131415161718
19202122232425
26272829   

数据统计

  • 访问量: 665817
  • 日志数: 3733
  • 影音数: 7
  • 文件数: 1
  • 建立时间: 2008-01-04
  • 更新时间: 2010-12-31

RSS订阅

Open Toolbar