一年多的时间一直在等待Silverlight的稳定版本,但是从1.0 2.0 到现在的3.0BETA 一直吸引着我,于是终于按奈不住,一窥了Silverlight的魅力。

Silverlight是什么?怎么说呢?也许开发过WPF的人会有比较透彻的理解。Silverlight就像WPF提炼出来运用到WEB上的插件。界面的开发,程序部分的开发都集成了WPF的那一套,不过,既然是应用到WEB上的,自然遵循了很多WEB的规则,因此也有些许区别于WPF,至少他们概念上就完全是两个东西,这样的比较就类似于WINFORM和 ACTIVEX。

Silverlight可以像FLASH一样做出炫目的客户端效果,同时拥有完善的开发构架,程序员可以非常方便的处理Silverlight中的事件、调用系统库,这是FLASH无法比拟的,当然FLASH相对Silverlight来说,动画和矢量的设计也许会更加得心应手。

对于客户端而言,Silverlight与FLASH基本上一样,用户都需要在浏览器上安装相应插件(Silverlight的插件小很多),展现出来同样的有视觉冲击力。所以对用户而言,处了安装的插件不同以外,其他似乎不存在什么太大的差异,这也是MS目的,只要用户不认为两者有什么区别甚至Silverlight更好,那么,对开发人员的方便就是对MS的方便。

废话多了。

如何搭建Silverlight的开发环境呢 ?

网上很多相关文章,给人的第一影响就是“麻烦”。没错,很麻烦,不像FLASH,安装一个FLASH软件就可以进行开发。

Silverlight,需要很多部件支持。

首先以目前的正式版本2.0来说,就需要VS2008 + SP1 ,VS的作用当然是做程序部分的开发,毋庸置疑,而且WEB的开发也用到它,所以先安装个VS2008+SP1没什么意见吧。

之后,你会发现你的VS2008并不能创建 Silverlight应用程序项目,为什么,因为你缺少 Silverlight Tool FOR VS2008 SP1 ,所以还要安装一个 Silverlight Tool for VS2008 SP1。

好了,可以在VS里创建Silverlight项目了,可以进行开发了,VS支持界面预览,但是不可编辑。而且用VS开发界面似乎不太现实,不用担心,MS当然也有它自己的界面开发工具  BLEND2 +SP1 ,BLEND里的示例是WPF的,所以可以知道,BLEND是开发WPF界面的,当然用来开发Silverlight的界面也是小菜一碟。 VS08可以和BLEND2相互切换来完成界面和程序的开发。

至此,就可以完成Silverlight的开发环境配置,配置好以后,.NET3.0 3.5会被默认的安装,这是需要注意的,因为开发过程中可能会用到3.0  3.5的库,因此如果将项目发布到服务器后,也应当相应的将.NET的这些版本安装到服务器上。

好了,创建个Silverlight来玩玩吧。

创建Silverlight应用程序项目的时候,VS会问你 是调试的时候生成测试页来承载Silverlight还是自动创建个ASP.NET项目来承载Silverlight, 有什么区别呢 ?如果你只是做Silverlight的界面和客户端的交互效果,用单独的测试页来承载就可以了,这样方便调试,按个CTRL+F5就OK,但是如果你要用到WCF,或者通过ASP.NET做些动态的事情,那么就用ASP.NET项目来承载吧,这样可以尽可能的模拟出将Silverlight承载到网站后的效果。

创建Silverlight后,你可以看到项目里有两个XAML文件并相应的对应了.CS文件, 一个是APP.XAML另一个是Page.XAML,APP.XAML.CS的构造函数是初始化Silverlight项目的,接下来

private void Application_Startup(object sender, StartupEventArgs e)
        {
            this.RootVisual = new page();
        }

可以看到 new 后面的就是Page.xaml.cs所在的类。他的意思当然就是创建Page示例,这样你的Page就被实例化出来了,很像WINFORM吧。

之后的事情,个人认为开发过.NET的人应该都驾轻就熟了。需要注意的是,跟开发ASP.NET不同,  Silverlight的所有代码是在客户端运行的,对于很多开发惯了ASP.NET的人来说可能一下子不习惯,不过如果你是做WINFORM的,那就当我没说。

试着写一个小程序来玩玩吧。

东西做好了,当然那就需要编译。Silverlight在生成后会在BIN下生成一个APPMAINFEST.XAML,这是一些配置比如DLL的路径,一个DLL,不用说了,逻辑代码都在这。另外会有一个XAP,这是什么,其实就是刚才说的那两个文件的一个压缩包,可以ZIP RAR工具打开,他只是将后缀作为XAP,这样在页面上<object>调用的时候SOURCE就会指向XAP这个包。

就这么简单,在WEB上用<object>承载这个生成出来的XAP包就可以显示Silverlight了。

似乎太没什么含量,感觉不出Silverlight的魅力。

那么就尝试做个应用了WCF的Silverlight吧。

WCF是什么?根据我了解的资料,WCF是一个统一的类似WEBSERVICE的解决方案,WEBSERVICE是WCF的一个子集。

他提供了更多更强的服务方案。

具体资料可以在MSDN上找到,废话不多说了。

引用WCF等过程与以前引用WEBSERIVCE差不多,摸索下很快就了解了。

这里提一下需要注意的地方。

在引用 WCF后,Silverlight项目里会生成一个ClientConfig文件,如果WCF项目是单独的,这个ClientConfig文件里不会写入任何东西,你只会看见一个配置跟节点。

但是如果你的WCF是创建在某个ASP.NET项目里,这时候生成出来的ClientConfig文件里会有很多配置,例如绑定方式和服务ENDPOINT(服务提供的地址)。

以上绿色文字的地方是我之前的理解错误,ServiceReferences.ClientConfig内是否自动生成配置信息是要看Silverlight引用的WCF是否启用了Silverlight功能,而不是看WCF是单独的项目还是在Web项目中的其中一项。所以在当我们在在项目中创建一个“启用Silverlight功能的WCF”后,在Silverlight项目中引用它时,ServiceReferences.ClientConfig文件就会自动配置出该引用的终节点和绑定。

实际上引用WCF之后,项目里只是创建了一个WCF所提供服务的类的结构,至于如何去绑定,去哪里请求服务,都是由配置的Binding方式和ENDPOINTADDRESS来决定。

为什么引用一个单独的WCF项目时不生成配置呢?因为在编码过程中,程序员可以制定BIND和ENDPOINT,所以,个人认为MS是为了让你的应用程序更加灵活,所以直接引用独立的WCF项目是不会生成CLIENTCONFIG的配置的,然而,如果你的WCF服务是来自一个ASP.NET项目的话,那么Silverlight项目会认为你将会把Silverlight承载到这个ASP.NET中的某页去,因此就将BIND和ENDPOINT直接配置到了CLIENTCONFIG中。当然,及时配置到了CLIENTCONFIG,在编码中仍然可以指定BIND和ENDPOINT来覆盖CLIENTCONFIG中的配置。

Silverlight在调用WCF服务是通过异步调用,因此代码类似这样:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        Binding binding = new BasicHttpBinding();
        EndpointAddress endPoint = new EndpointAddress(
                "http://localhost:52424/Blog.svc");

BlogClient client = new BlogClient(binding, endPoint);
        client.GetPostsCompleted += new EventHandler<GetPostsCompletedEventArgs>(client_GetPostsCompleted);
        client.GetPostsAsync();
    }

void client_GetPostsCompleted(object sender, GetPostsCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            Posts.ItemsSource = e.Result;
        }
    }

可以看到,当你在WCF创建了一个类,调用的时候,该类会被命名成[类名]+Client,所以,看到别人调用的时候有个XXCLIENT,不要奇怪为什么上下文找不到其定义。

之后,类中的方法也会成为 方法+ASYNC  这是异步方法,在Silverlight中引用WCF就会出现,而在ASP.NET项目中引用则没有。

WCF被Silverlight引用后,会生成一个事件,对应方法  方法名+Compeleted,在事件上绑定好处理函数,就完成了异步调用并异步返回了。

很简单吧,比起AJAX来说,实在是方便很多。

注意看的朋友会发现 这里定义了个 Binding 类型的binding实例,和一个EndpointAddress 类型的endPoint,这就是之前我提到可以在编码中手工指定 bind方法和Endpoint的地方,如果 ClientConfig里配置好了这两个参数,你也可以这样写

private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {

BlogClient client = new BlogClient();
        client.GetPostsCompleted += new EventHandler<GetPostsCompletedEventArgs>(client_GetPostsCompleted);
        client.GetPostsAsync();
    }

当然,及时ClientConfig里配置好了,也可以通过编码的时候指定来更改这两个参数。

如果完全理解了Silverlight+WCF怎么做,我想你可以轻松的完成一个小示例来享受下Silverlight的魅力。

但是可能大多数人在做Silverlight+WCF的时候会遇到一些郁闷的问题,典型的就是跨域访问的问题。

WCF比 WS考虑得要周全些了,为了禁止外部的非法调用,WCF默认只能是同域才可访问,我们在开发的时候,如果WCF是单独的项目,那么调试时,WCF的路径可能是 http://localhost:1234/test.svc。而用来承载Silverlight的ASP.NET路径则可能是 http://localhost:4321/xx.aspx ,这样是会被认为是两个不同的域,因此你的Silverlight将会出现跨域访问的报错,如果解决呢?没什么特的,部署好,或是将两个项目都生成好之后部署到IIS里,或是将 WCF项目移植到 ASP.NET项目中。

OK!

基本上来说,Silverlight以及 Silverlight+WCF的开发解决方案就如此了。

有什么新的信息下次补充。

转载于:https://www.cnblogs.com/ZetaChow/archive/2009/04/24/2237354.html

Silverlight WCF 初尝小结相关推荐

  1. Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)

    2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 在Silverlight+WCF 新手实例 象棋 主界 ...

  2. Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 演示已更新到此节介绍:Silverlight+WCF 新手实例 象棋 介绍III(二十三) 本节连着Silverlight+WC ...

  3. Silverlight+WCF 新手实例 象棋 主界面-事件区-求和认输(三十二)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 事隔几篇,我们又回到事件区,继续其它两个按钮事件,来张图吧: 在Silverlight+WCF 新手实例 象棋 主界面-事件区- ...

  4. Silverlight+WCF 新手实例 象棋 该谁下棋-B下A停(三十)

    2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 上上一节,就是二十八节:Silverlight+WCF ...

  5. Silverlight+WCF 实战-网络象棋最终篇之对战视频-下篇[客户端发送与服务端中转](六)...

    本篇继上一篇:Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)  一:对战视频 简单原理 略,内容见上篇. 二:对战视频 步骤解析: 略 ...

  6. Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)...

    前言: 近期在忙点"秋色园"的事情,所以网络象棋这一块文章就写的相对慢,而且刚好接上篇:Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四)  之后, ...

  7. linux c调用wcf服务,Silverlight+WCF实现跨域调用

    在这篇文章中,WCF扮演服务器,向外提供LoginVaild服务:Silverlight扮演客户端,调用WCF提供的LoginVaild服务.思路有了,下面进行代码实现. 数据库脚本实现 新建T_Us ...

  8. Silverlight+WCF 新手实例 象棋 主界面-事件区-返回退出(三十三)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 还是那张图: 本节实现返回大厅和退出系统: 一:返回大厅,其实很简单的说,就是转向房间列表了. 可是,转向前也有很多事情要处理的 ...

  9. 在Silverlight+WCF中应用以角色为基础的安全模式(一)基础篇之角色为基础的安全模式简介...

        引言 最近一直在研究Silverlight+WCF应用中的安全问题,如何设计一个安全,又符合Silverlight和WCF的规范的应用呢?又可以将以前的角色为基础的开发框架拿来主义呢? 我们知 ...

最新文章

  1. RESET MASTER和RESET SLAVE使用场景和说明,以及清除主从同步关系
  2. 15-07-06 定闹钟
  3. Get Network Utilization
  4. Sentinel限流实战
  5. 《Android框架揭秘》——1.2节通过启动过程分析Android Framework
  6. graphpad两组t检验_Graphpad 分析教程 | 手把手教你玩转独立样本 t 检验
  7. STC官网首页资源整理
  8. 计算机主板内存设计规范,PC 新时代!DDR5 内存规范正式发布
  9. X86、X86_64、X64的区别
  10. 张伯旭:北京亦庄着力打造中国云产业园
  11. 一对一、一对多、多对多(实操)
  12. 快递企业如何完成运单订阅消息的推送
  13. 为什么要学习科学的方法论
  14. getElementById 用法的一个技巧
  15. Linux系统下管理员账号root忘记密码怎么找回
  16. 微信小程序开发实现微信支付
  17. 关于安卓手机里的文件夹及其由来
  18. 信号时频域分析 ——EMD/BEMD/LMD 算法原理
  19. 小数除以整数在c语言,小数除以整数的说课稿
  20. NavicatPremium15安装教程

热门文章

  1. 【tf下载mnist数据】urlopen error [Errno 11004] getaddrinfo failed
  2. Excel较大规模数据处理实例(可直接用)python实现
  3. 第五篇T语言实例开发,数组空间使用(版本5.3)
  4. 获取input数据_使用 PHP Masked Package 屏蔽敏感数据
  5. nRF52 SAADC 直接操作寄存器
  6. 如何实现linux+windows双系统启动
  7. Gitlab备份与恢复[七]
  8. [问题解决] File /struts-tags not found
  9. 【数据库】防止SQL注入
  10. C++11 新增关键字decltype学习