本篇以及下一篇文章我将向大家介绍下在Silverlight中如何创建WCF Service
以及如何调用WCF通信获得数据以及上传数据
并手把手教大家如何实现如下的上传文件程序(计划在下一篇讲述)
第一个范例:
先创建一个Silverlight应用程序
下面给Silverlight添加一个Silverlight-Enabled WCF Service如下图所示:
默认创建出来的.svc文件代码如下:
这个.svc文件中定义了一个操作契约public void DoWork() (什么是操作契约请查看WCF相关材料)
没有任何输入也没有任何返回结果,明显是一个没有任何用处的操作契约
我将其修改如下:
2 public int GetRandom( int data)
3 {
4 Random rand = new Random(data);
5 // Add your operation implementation here
6 return rand.Next();
7 }
通过传入一个int值来返回一个随机数
重新编译整个工程
接下来的问题就是如何在客户端调用这个WCF Service了
具体操作如下:
选择Silverlight工程的References并点击右键选择Add Service References…
点击Discovery按钮将自动帮你找到当前可得的服务
(顺便提一下Silverlight的WCF Binding只支持 binding="basicHttpBinding")
当然你如果知道当前的服务地址,你也可以在Address:中输入然后按Go来查找服务
我给服务在客户端的名字空间取名为DataServiceRef(当然你可以随便去你想要的名字)
按OK,svcUtil.exe将自动为你生成客户端代码
双击生成的Service References: DataServiceRef就能通过对象浏览器来查看生成的客户端对象了,如下图所示
接下来调用GetRandomAsync(int)来传送数据
并注册GetRandomCompleted事件来实现回调或者返回的数据
代码如下:
2 {
3 DataServiceRef.GetDataServiceClient client = new WCFTest.DataServiceRef.GetDataServiceClient();
4 client.GetRandomAsync( 100 );
5 client.GetRandomCompleted += new EventHandler < WCFTest.DataServiceRef.GetRandomCompletedEventArgs > (client_GetRandomCompleted);
6 }
7
8 void client_GetRandomCompleted( object sender, WCFTest.DataServiceRef.GetRandomCompletedEventArgs e)
9 {
10 this .txtData.Text = " The return data is " + e.Result.ToString();
11 }
页面的界面代码如下:
2 < StackPanel HorizontalAlignment = " Center " VerticalAlignment = " Center " >
3 < TextBlock x:Name = " txtData " FontSize = " 20 " Foreground = " White " />
4 < Button Content = " Get Data " FontSize = " 20 " Padding = " 8,5 " Margin = " 0,5 " Click = " Button_Click " />
5 </ StackPanel >
6 </ Grid >
运行效果图如下:
发布应用程序:
通过IIS发布本应用程序你必须注册WCF组件(不然无法识别.svc文件,你的WCF通信将瘫痪)
在Vista操作系统中你需要按照如下步骤进入
Control Panel->Programs->Programs and Features->Turn Windows Features on or off
勾选下图中框红的那个组件(默认不勾选)
如果是在XP或者Windows 2003上,请在命令行中运行如下代码注册WCF组件
cd %SYSTEMROOT%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\
ServiceModelReg.exe /i /x
这样你的Silverlight就可以在IIS上面正常运行了
(当然要让IIS识别.xap以及.xaml还需要添加两个MIME Types,具体请看http://www.cnblogs.com/ibillguo/archive/2008/08/31/1280418.html
总结:
本篇文件大致演示了如何创建WCF Service,并在客户端调用生成的WCF Service来取得数据