silverlight 和 服务器进行数据交互 WCF篇
一直没有机会接触Silverlight,如下内容是我最近工作中感悟出来的,记录如下:
一般DLL类库--(添加引用)---WCF服务---(添加服务引用)--Silverlight项目---(XAP)---站点
1:新建silverlight应用程序项目,会产生一个silverlight项目S和一个网站项目N
两者的关联:S属性 WCF RIA 服务链接地址是N;
N的属性WEB项--调试器,勾选Silverlight;Silverlight项可以添加Silverlight项目
2:生成项目,N会生成ClientBin文件夹,存放S的XAP文件,这个文件可以看成一个压缩包,是S引用到的DLL和自己的DLL。到N运行的时候,会自动下载这个XAP包到客户端环境,客户端环境是安装了Silverlight的环境,XAP可以尽情的这个环境下运行。这是Silverlight项目和站点的交互。
3:那Silverlight和外界的一般的DLL是怎么交互的呢?是通过服务,也叫Service引用!Silverlight程序是在Silverlight运行时运行的,所以一般的类库有些是不支持Silverlight的.在Silverlight项目中添加你要的Service引用,那Silverlight会帮你生成相关的客户端代码。这里先说WCF的应用。
新建一个WCF应用项目,在这里可以引用一般的DLL类库,实现业务逻辑,最后将其发布成服务,Silverlight可以添加引用这个服务。
4:WCF项目 默认类名为服务名 如:KH_Service
namespace DictServices
{
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class KHService
{
[OperationContract]
public string GetKHs(string prefix, int count, string gs)
{ return "kh"; }
[OperationContract]
public string GetNames(string prefix, int count, string gs)
{ return "names"; }
}
}
4:服务类库中随便使用DLL,可是Silverlight中是怎么调用服务类的呢?这里是重点。
KH_Service.KHServiceClient khclient = new KH_Service.KHServiceClient(); //服务的客户端类
this.khclient.GetKHsCompleted+=new EventHandler<GetKHsCompletedEventArgs>(khclient_GetKHsCompleted); //客户端事件定义
//或: this.khclient.GetKHsCompleted += this.khclient_GetKHsCompleted;
khclient.GetKHsAsync("a", 4, "dd"); //异步传参
//服务中的方法GetKHs 在这里作为一个完成事件存在于GetKHsCompletedEventArgs,实现调用。
private void khclient_GetKHsCompleted(object obj, GetKHsCompletedEventArgs e)
{ e.Result } //e.Result是服务中方法GetKHs的返回值。
这样的话,Silverlight就可以用到服务器中DLL的返回值了。
5:最后要应用到站点中:Silverlight的XAML文件类似ASPX文件,只是HTML元素没有CSS,比较复杂了
主要的页面在Silverlight项目中,而Silverlight是通过<object>的形式潜入到普通ASP页面的:
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/SilverlightApplication.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="5.0.61118.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="获取 Microsoft Silverlight" style="border-style:none"/>
</a>
</object>
运行普通的ASP或ASPX页面即可。
嵌入object的参数说明 source是XAP文件地址
待续...
浙公网安备 33010602011771号