上一篇博文中有朋友问到关于silverlight程序发布的问题,上一篇写的是silverlight访问host在console上的wcf,其实关于wcf和silverlihgt通信的问题有好几种方式,这里列举了一下
- 客户端和服务端采用http协议通信(分两种,同域或不同域)
- 客户端和服务端采用tcp协议通信(分两种,服务端在IIS上,服务端不在IIS上《控制台、windows服务、winform等等》)
由于方式众多,这里仅就常用的方式进行说明
1,silverlight和wcf在同一个域中(http/tcp协议均可)
这是最简单的方式,如下图,
wcf是直接以寄宿在IIS中依靠IIS的生命周期管理服务的,所以这种模式,只要将WcfTcpSl.Web发布即可,其中wcfSerivce.svc可独立提供服务,WcfTcpslTestPage.aspx提供silverlight的载入。
2 ,silverlight和wcf不在同一个域中(http/tcp协议均可)
通常我们为了更好的维护代码并保持代码结构的清晰,会将WCF服务独立出来,成为单独的project,即web和wcf服务属于不同的应用程序,这时候就需要在web中引入策略文件了,因为silverlight跨域访问时需要指定的端口进行验证。
与第一种不同的是
- 需要在web下加一个clientaccesspolicy.xml策略文件
- 发布时需要两个虚拟目录,各自独立的应用程序域。
将web和wcf发布在两个不同的虚拟目录中
3,silverlight在IIS下,WCF服务寄宿在控制台上,(tcp协议进行通信)
这种模式呢,我理解可能会用到数据流量比较大或者对实时通信要求比较高的情况下,需要进行tcp连接时使用的。这个模式呢,由于silverlight4和wcf4之间的跨域通信有所改进,换在了80端口,所以只需要在IIS根目录下面一个跨域文件clientaccesspolicy.xml即可,就是说你要保证 silverlight所访问的主机http://localhost:80/clientaccesspolicy.xml这个文件能够找到。发布时可以先将host在console上的服务放到一个相对稳定的目录,运行即可,然后将silverlight的web发布到虚拟目录即可访问。
wcf服务的寄宿方式有多种选择,所以服务的部署方式也会有不同的选择, silverlight也有out of brower的形式,灵活的选择这些方式将会给我们的程序带来良好的体验。
下一篇,将会尝试使用单工及双工的形式来进行视频流的传输。