代码改变世界

Silverlight4配合WCF net.tcp实现在线聊天应用攻略1

2010-06-26 00:19  NicolasZhang  阅读(2156)  评论(6编辑  收藏  举报

       Silverlight 4对WCF net.tcp协议的支持可谓是此版本较上版本最强大的突破,有大牛甚至认为net.tcp协议的支持是Silverlight kills WPF最重要的理由(出处)。

       网上也有类似的项目(如小笨蛋的WebChat),但是我一直没配通这些项目,小笨蛋提到的Online Template-Silverlight TCP Socket Policy现在貌似也没有了,所以索性自己研究着SDK写一个自己的聊天应用吧。

       首先,通读并理解Microsoft Silverlight 4 脱机文档是学习Silverlight 4最好的办法,先来试试其中的范例代码。Microsoft Silverlight 4 脱机文档中“网络和通信”一章对Silverlight 4各种通信方式做了详细的介绍,我关注其中的“在Silverlight中访问Web服务”一节中的“生成和访问双工服务”小节内容,文档中的内容已经很详尽就不再赘述,依照其中步骤进行就可以了,但由于我在配置过程中遇到不少问题,下面分享一下在实现此范例应用中需要注意的地方。

      1.SDK中提到Visual Studio 2010自带的Web Server不支持net.tcp activation功能,所以务必在承载WCF服务的Web项目中使用local IIS(必须是IIS 7以上版本)进行调试,并且需要在“打开或关闭Windows功能”中安装Microsoft .NET Framework 3.5.1中的Windows Communication Foundation HTTP Activation、Windows Communication Foundation Non-HTTP Activation和Web管理工具-IIS6管理兼容性-IIS元数据库和IIS6配置兼容性这三个功能;

      2.按照SDK中的提示在Web.config中进行bindings和services的配置,此处需要注意的是需要在第一个endpoint中指定address为WCF服务的地址(类似:net.tcp://localhost:4502/XXX/DuplexService.svc);

     3.在IIS建立虚拟目录后需要在设置站点对net.tcp的支持,具体在网站的高级属性中最后一行中添加,net.tcp,并在WCF项目所在虚拟目录中进行同样的设置,之后配置网站绑定,在网站绑定中添加net.tcp协议内容为4502:*;

     4.重要:在承载网站根目录下添加clientaccesspolicy.xml,内容为:

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="SOAPAction">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <socket-resource port="4502" protocol="tcp" /> 
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

     5.在向Silverlight项目中添加服务引用的时候有时会出现Could not load file or assembly 'System.ServiceModel.Activation.HttpModule’ from assembly…的错误,则需要在命令行中运行C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regiis.exe -iru重新安装ASP.NET 4.0;

     若还有其他易配置错误地方,我会随后补上。

     下篇介绍我自己参考WebChat和SDK中的项目自己写的Silverlight在线聊天小应用。