silverlight:wcf双工通讯学习笔记
2009-12-22 11:30
316 查看
一直觉得SL中的wcf双工通讯方式有点鸡肋,如果是以http方式实现则效率太低,如果用SL4中的tcp方式实现,又跟socket太雷同,所以一直没去研究,不过这东西在对性能要求不高时(比如在网页上每5分钟更新一次天气预报/股票信息),实现起来还是蛮方便的.
wcf双工通讯与传统的wcf相比,最大的区别就是:传统的wcf通常都是客户端去调服务,即客户端从服务端上“拉”信息,而双工通讯除了允许客户端从服务端"拉"信息外,服务端还能主动向客户端“推”送信息。
当然这种实现是有性能消耗的,服务端将保存一条"回调通道"以便能利用该通道把信息推到客户端,而客户端也要有相应的回调函数来处理--有点类似"ajax中的长链接"以及"服务器推"技术
sl3的官方文档http://msdn.microsoft.com/zh-cn/library/dd470106(VS.95).aspx中有一个客户端把订单发送到服务端,然后由服务端处理后,再把结果回推到客户端的例子,不过sdk中有二个地方没有注明细节,可能会误导大家调试失败。
1.服务端的web.config中配置bindingExtensions时,如果按照官方的配置写法:
<extensions>
<bindingExtensions>
<add name="pollingDuplexHttpBinding"
type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement, System.ServiceModel.PollingDuplex, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</bindingExtensions>
</extensions>
浏览svc将提示程序集加载失败,如果出现这种情况,请将上面的“, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”去掉,即改成
<extensions>
<bindingExtensions>
<add name="pollingDuplexHttpBinding" type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement, System.ServiceModel.PollingDuplex"/>
</bindingExtensions>
</extensions>
另外,如果生成后,发现bin目录下没有System.ServiceModel.PollingDuplex.dll,可以手动复制一份到bin目录中
2.客户端调试时,如果出现无法访问客户端,请检查服务端下有无策略文件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>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
源代码下载:DuplexWcf_SL.rar (vs2010编辑的,用vs2008打开可能需要手动修改一些地方)
wcf双工通讯与传统的wcf相比,最大的区别就是:传统的wcf通常都是客户端去调服务,即客户端从服务端上“拉”信息,而双工通讯除了允许客户端从服务端"拉"信息外,服务端还能主动向客户端“推”送信息。
当然这种实现是有性能消耗的,服务端将保存一条"回调通道"以便能利用该通道把信息推到客户端,而客户端也要有相应的回调函数来处理--有点类似"ajax中的长链接"以及"服务器推"技术
sl3的官方文档http://msdn.microsoft.com/zh-cn/library/dd470106(VS.95).aspx中有一个客户端把订单发送到服务端,然后由服务端处理后,再把结果回推到客户端的例子,不过sdk中有二个地方没有注明细节,可能会误导大家调试失败。
1.服务端的web.config中配置bindingExtensions时,如果按照官方的配置写法:
<extensions>
<bindingExtensions>
<add name="pollingDuplexHttpBinding"
type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement, System.ServiceModel.PollingDuplex, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</bindingExtensions>
</extensions>
浏览svc将提示程序集加载失败,如果出现这种情况,请将上面的“, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”去掉,即改成
<extensions>
<bindingExtensions>
<add name="pollingDuplexHttpBinding" type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement, System.ServiceModel.PollingDuplex"/>
</bindingExtensions>
</extensions>
另外,如果生成后,发现bin目录下没有System.ServiceModel.PollingDuplex.dll,可以手动复制一份到bin目录中
2.客户端调试时,如果出现无法访问客户端,请检查服务端下有无策略文件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>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
源代码下载:DuplexWcf_SL.rar (vs2010编辑的,用vs2008打开可能需要手动修改一些地方)
相关文章推荐
- silverlight之wcf双工通讯学习笔记
- Silverlight学习笔记二:Silverlight从WCF那里获取数据,WCF为Silverlight提供数据
- Silverlight3学习笔记5(Silverlight,WCF双工通信)
- SilverLight学习笔记--使用WebClient实现通讯(一)(上传和下载字符串数据)
- SilverLight学习笔记--使用WebClient实现通讯(二)(上传和下载流数据)
- 使用WebClient实现通讯(Silverlight学习笔记)
- SilverLight学习笔记--Silverlight中WebService通讯
- WCF学习笔记(五)契约双工通信、多契约绑定及对数据库增删改查等综合实例
- Silverlight学习笔记一:什么是WCF?
- [学习笔记]Silverlight+WCF对数据库进行操作
- Silverlight学习笔记[4] - 在Silverlight中通过WCF连接ORACLE DB数据库(译)
- 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)
- SilverLight学习笔记--Silverligh之Json的通讯传递
- [Silverlight学习笔记]关于利用WCF RIA Service进行通信并在客户端获取数据
- Silverlight学习笔记三:WCF跨域调用,实现登陆页
- SilverLight商业应用程序开发---学习笔记(2) WCF RIA服务
- SilverLight学习笔记--WCF服务
- SilverLight与WCF服务双工通讯第一篇:PollingDuplexHttpBinding
- SilverLight学习笔记--Silverlight中WebService通讯
- silverlight 学习笔记 (四): MVVM+WCF Ria开发架构