温伟的程序生活,一步一个脚印
自己会努力,做真正独一无二的温伟!无论前方有多难,我都不会放弃... 每一篇日志,都是我的积累,全是我的原创!

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文件地址

待续...

posted on 2012-12-26 14:41  winvay  阅读(170)  评论(0)    收藏  举报