Silverlight3学习笔记5(Silverlight,WCF双工通信)
2009-11-02 15:49
483 查看
了解过了上一篇的Silverlight与WCF基本通信的尝试,终于超我的Web多客户端象棋迈进一步步了。
不过上一篇的尝试真正解决的Web获取WCF消息的方式还是通常的拉消息。任然不能满足我Web象棋的实时性。
其实通过前面这么长时间的尝试,最终真正希望还是使用Silverlight与WCF的双工通信。关于Silverlight与WCF的双工通信的实例最权威的应该是MSDN上提供的两篇文章。服务端实例可以参考该链接,客户端实例可以参考该链接,原该文章是在Silverlight2.0上实现的,如果开发是在Silverlight3.0上做,文章后面的Comment已经对新版本的Silverlight进行了修正。虽然修正不是很及时,但是好歹现在这个例子是可用了,哈!
当然要想把该例子完全应用在项目中,真的还需要不少的改造才好,不管怎么样,大概尝试Silverlight与WCF的双工通信是没有问题了。
现在既然MSDN上的例子这样完整了,我就是想提出些真正比较有价值的项目开发实战的方式,而不是仅仅为可用的代码,希望能给在尝试摸索的朋友们一点帮助!
项目结构继续改善调整
在上一篇文章里面我已经对原Silverlight消费WCF服务进行了项目的改造,并且给出了分别部署服务和Silverlight客户端的过程以及其中遇到的一些问题,现在把该结构应用到Silverlight消费WCF双工服务上基本的是完全实用,只是其中需要改动的细节不可忽略。
这里先把新的项目结构图示下:
public class PollingDuplexServiceHost:ServiceHost
public class PollingDuplexServiceHostFactory:ServiceHostFactoryBase
<%@ ServiceHost Language="C#" Debug="true"
Factory="WcfServiceApp.PollingDuplexServiceHostFactory" %>
也就是说在基本WCF开发的方式中给Web.config中添加的EndPoint节点内容是必须要去除的
<system.serviceModel>
<services>
<service name="WcfServiceApp.OrderService" behaviorConfiguration="WcfServiceApp.Service1Behavior">
<!--<endpoint address="" binding="basicHttpBinding" contract="WcfDuplexContract.IDuplexService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>-->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WcfServiceApp.Service1Behavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
如果没有去除的话,在初始化ServiceHost时就会得到重复创建服务EndPoint的错误。
细节点2:在客户端消费WCF中,原方式在初始化Client在应用了WCF服务后,必须在其生成的ServiceReferences.ClientConfig中指定对应的<system.serviceModel>节点作为初始化Client端EndPoint的所需条件,但是在消费双工服务的初始化已经被如下代码所替代
PollingDuplexHttpBinding binding = new PollingDuplexHttpBinding()
EndpointAddress address = new EndpointAddress("http://localhost/WCFService/OrderService.svc");
client = new DuplexServiceClient(binding, address);
当然我没有尝试通过配置来初始化双工服务,有兴趣的朋友可以去尝试配置来初始化双工服务。(猜想应该是可行的)
有了上面的这些调整后,一个消费WCF的双工服务基本就成型了。下面就是看看客户端真正怎么调用的问题了。
在这里我基本就是傻瓜开发了,哈!
由于在Silverlight客户端已经引用了WCF的服务,所以这里加客户端代码就很简单了,当然如果有兴趣的朋友就真的应该好好看看MSND上的客户端实例,这个代码基本上把调用双工服务中的细节都实现了,完全没有依靠自动工具的实现,对于想了解细节的朋友应该是有些帮助了。
最后我就把我自己简陋的客户端代码Share下,就是想告诉大家,客户端代码如果使用了引用服务后的自动代码就可以写自己很简单的客户端。
void MainPage_Loaded(object sender, RoutedEventArgs e)
private void Button_Click(object sender, RoutedEventArgs e)
void client_ReceiveReceived(object sender, ReceiveReceivedEventArgs e)
void client_OrderCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
this.txtData.Text = this.txtData.Text + "Client State is Order Complete is running " + client.State.ToString() + "\r\n";
}
现在一个消费WCF双工服务的Silverlight客户端就基本完工了,对于服务端的实现,我就不单独再贴了,因为同原服务端实例没有太大的区别了。
最后这个消费方式就完全可以跑通了,哈!
架子虽然完全搭好了,不过发现完全要实现我的Web象棋还需要做很多工作要做,这个就是后续的工作了。
感兴趣的朋友尽情期待!谢谢!
不过上一篇的尝试真正解决的Web获取WCF消息的方式还是通常的拉消息。任然不能满足我Web象棋的实时性。
其实通过前面这么长时间的尝试,最终真正希望还是使用Silverlight与WCF的双工通信。关于Silverlight与WCF的双工通信的实例最权威的应该是MSDN上提供的两篇文章。服务端实例可以参考该链接,客户端实例可以参考该链接,原该文章是在Silverlight2.0上实现的,如果开发是在Silverlight3.0上做,文章后面的Comment已经对新版本的Silverlight进行了修正。虽然修正不是很及时,但是好歹现在这个例子是可用了,哈!
当然要想把该例子完全应用在项目中,真的还需要不少的改造才好,不管怎么样,大概尝试Silverlight与WCF的双工通信是没有问题了。
现在既然MSDN上的例子这样完整了,我就是想提出些真正比较有价值的项目开发实战的方式,而不是仅仅为可用的代码,希望能给在尝试摸索的朋友们一点帮助!
项目结构继续改善调整
在上一篇文章里面我已经对原Silverlight消费WCF服务进行了项目的改造,并且给出了分别部署服务和Silverlight客户端的过程以及其中遇到的一些问题,现在把该结构应用到Silverlight消费WCF双工服务上基本的是完全实用,只是其中需要改动的细节不可忽略。
这里先把新的项目结构图示下:
public class PollingDuplexServiceHost:ServiceHost
public class PollingDuplexServiceHostFactory:ServiceHostFactoryBase
<%@ ServiceHost Language="C#" Debug="true"
Factory="WcfServiceApp.PollingDuplexServiceHostFactory" %>
也就是说在基本WCF开发的方式中给Web.config中添加的EndPoint节点内容是必须要去除的
<system.serviceModel>
<services>
<service name="WcfServiceApp.OrderService" behaviorConfiguration="WcfServiceApp.Service1Behavior">
<!--<endpoint address="" binding="basicHttpBinding" contract="WcfDuplexContract.IDuplexService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>-->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WcfServiceApp.Service1Behavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
如果没有去除的话,在初始化ServiceHost时就会得到重复创建服务EndPoint的错误。
细节点2:在客户端消费WCF中,原方式在初始化Client在应用了WCF服务后,必须在其生成的ServiceReferences.ClientConfig中指定对应的<system.serviceModel>节点作为初始化Client端EndPoint的所需条件,但是在消费双工服务的初始化已经被如下代码所替代
PollingDuplexHttpBinding binding = new PollingDuplexHttpBinding()
EndpointAddress address = new EndpointAddress("http://localhost/WCFService/OrderService.svc");
client = new DuplexServiceClient(binding, address);
当然我没有尝试通过配置来初始化双工服务,有兴趣的朋友可以去尝试配置来初始化双工服务。(猜想应该是可行的)
有了上面的这些调整后,一个消费WCF的双工服务基本就成型了。下面就是看看客户端真正怎么调用的问题了。
在这里我基本就是傻瓜开发了,哈!
由于在Silverlight客户端已经引用了WCF的服务,所以这里加客户端代码就很简单了,当然如果有兴趣的朋友就真的应该好好看看MSND上的客户端实例,这个代码基本上把调用双工服务中的细节都实现了,完全没有依靠自动工具的实现,对于想了解细节的朋友应该是有些帮助了。
最后我就把我自己简陋的客户端代码Share下,就是想告诉大家,客户端代码如果使用了引用服务后的自动代码就可以写自己很简单的客户端。
void MainPage_Loaded(object sender, RoutedEventArgs e)
private void Button_Click(object sender, RoutedEventArgs e)
void client_ReceiveReceived(object sender, ReceiveReceivedEventArgs e)
void client_OrderCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
this.txtData.Text = this.txtData.Text + "Client State is Order Complete is running " + client.State.ToString() + "\r\n";
}
现在一个消费WCF双工服务的Silverlight客户端就基本完工了,对于服务端的实现,我就不单独再贴了,因为同原服务端实例没有太大的区别了。
最后这个消费方式就完全可以跑通了,哈!
架子虽然完全搭好了,不过发现完全要实现我的Web象棋还需要做很多工作要做,这个就是后续的工作了。
感兴趣的朋友尽情期待!谢谢!
相关文章推荐
- Silverlight3学习笔记6(Silverlight,WCF双工通信)(回调异常问题处理)
- [Silverlight学习笔记]创建Silverlight 3与WCF之间的 双工通信
- 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)
- silverlight之wcf双工通讯学习笔记
- Silverlight学习笔记一:什么是WCF?
- [Silverlight学习笔记]关于利用WCF RIA Service进行通信并在客户端获取数据
- Silverlight3学习笔记4(Silverlight,WCF通信)
- Silverlight学习笔记[4] - 在Silverlight中通过WCF连接ORACLE DB数据库(译)
- Silverlight学习笔记二:Silverlight从WCF那里获取数据,WCF为Silverlight提供数据
- SilverLight商业应用程序开发---学习笔记(2) WCF RIA服务
- [学习笔记]Silverlight+WCF对数据库进行操作
- silverlight 学习笔记 (四): MVVM+WCF Ria开发架构
- silverlight:wcf双工通讯学习笔记
- silverlight 学习笔记 (四): MVVM+WCF Ria开发架构
- Silverlight学习笔记三:WCF跨域调用,实现登陆页
- SilverLight学习笔记--WCF服务
- SilverLight学习笔记--如何创建弹出子窗口并与之交互
- Silverlight学习笔记五( 在Silverlight 2.0/3.0/4.0 中使用OpenFileDialog浏览本地图片)
- WCF 学习笔记之双工实现