我不能否认双工异步调用的性能优势,但有些事情让我感到谨慎。
我担心的是,给定实例化的客户端对象,WCF是否能够判断哪个特定的客户端服务实例将接收回调参数?
有人能告诉我这是不是个好主意吗?如果不是,为什么不呢?
new DuplexChannelFactory<IServerWithCallback>(
new ClientService(),
new NetTcpBinding(),
new EndpointAddress("net.tcp://localhost:1234/"+Guid.NewGuid()))这样做是为了避免超时问题。当完成接收,发送,处置时,尽快。按照惯例-不能传递客户服务。如果您需要信息,创建一个新的,简单的-就像EF/L2等,
发布于 2012-02-03 20:43:08
我认为最终双工服务只是微软另一个失败的架构。这是其中之一,这些东西看起来真的很好在纸上,但只是分崩离析的仔细研究。
有太多的弱点:
1)依赖会话,通过服务器建立客户端侦听器。这是会话信息存储在内存中。因此,服务器本身无法实现负载平衡。或者,如果它是负载平衡的,您需要打开ip关联,但是现在,如果其中一个服务器遭到轰炸,您就不能简单地添加另一个服务器,并期望所有这些会话自动迁移到新服务器。
2)对于每个位于路由器/防火墙/负载均衡器后面的客户端,需要创建一个具有特定端口的新端点。否则,路由器将无法正确地将回调消息路由到适当的客户端。另一种选择是有一个允许自定义编程将特定路径重定向到特定服务器的路由器。又是一项艰巨的任务。或者另一种方法是让回调的客户端托管自己的数据库并通过数据库共享数据--在某些情况下,许可费用不是问题.但是它在客户机上引入了很多复杂和繁重的内容,而且它将应用程序层和服务层混合在一起(在某些特殊情况下,这可能是可以接受的,但在庞大的设置成本之上)。
( 3)这一切基本上是说,复式实际上是没有用的。如果您需要回调,那么您将很好地在客户端设置wcf主机。它将更简单,更可伸缩。此外,客户机和服务器之间的耦合也较少。
对于可伸缩体系结构,最好的双工解决方案是最终不使用这种解决方案。
发布于 2012-02-03 18:17:04
https://stackoverflow.com/questions/9125442
复制相似问题