热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#学习教程:WCFDuplex客户端的最佳实践分享

WCFDuplex客户端的最佳实践我不能否认双工异步调用的性能优势,但有些事情让我感到谨慎。我担心的是,给定一个客户端对象实例化,WCF能否告诉哪个特定的客户端服务实例将收到回调参

WCF Duplex客户端的最佳实践

我不能否认双工异步调用的性能优势,但有些事情让我感到谨慎。

我担心的是,给定一个客户端对象实例化,WCF能否告诉哪个特定的客户端服务实例将收到回调参数?

谁能告诉我这是不是一个好主意? 如果不是为什么不呢?

new DuplexChannelFactory( new ClientService(), new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:1234/"+Guid.NewGuid())) 
  1. 如果保留上面的虚拟路径,则如何将其丢弃。 我希望客户端服务的生命周期相当短。 IE发出请求并收到响应,完成接收后,将其杀死。 将客户端服务生命周期缩短而不是将其整合并使其保持更长时间的性能损失有多糟糕。

    这个想法是为了避免超时问题。 完成接收,发送,尽快处理。 按照惯例 – 无法传递客户服务。 如果您需要信息,请创建一个新的,简单的 – 就像EF / L2S等。

  2. 从WCF服务本身内部,如何终止与客户端的会话。 即。 我不希望客户端结束会话 – 我知道我可以相应地修饰我的操作,但我希望服务在满足某些条件时以编程方式终止自身。

  3. 我可以相应地粘贴端口并转发以解决任何防火墙问题,但我担心的是客户端是否坐在负载均衡器后面。 服务如何知道要调用哪个特定服务器?

我认为最终Duplex服务只是微软另一个失败的架构。 这是纸上看起来非常好的东西之一,但经过仔细检查就会崩溃。

有太多的弱点:

1)依赖会话来由服务器建立客户端监听器。 这是会话信息存储在内存中。 因此,服务器本身无法进行负载平衡。 或者如果它是负载平衡的,你需要打开ip affinity,但现在如果其中一个服务器被轰炸,你不能简单地添加另一个服务器并期望所有这些会话自动迁移到新服务器。

2)对于位于路由器/防火墙/负载均衡器后面的每个客户端,需要创建具有特定端口的新端点。 否则,路由器将无法将回调消息正确路由到适当的客户端。 另一种方法是使用允许自定义编程的路由器将特定路径重定向到特定服务器。 又一个很高的订单。 或者另一种方式是使用回调的客户端托管自己的数据库并通过数据库共享数据<- 可能在某些情况下工作,其中许可费用不是问题......但它引入了很多复杂性并且如此繁重客户端加上它将应用程序和服务层混合在一起(在某些特殊情况下可能是可以接受的,但不会超出巨大的设置成本)

3)所有这些基本上都说双工几乎没用。 如果你需要回电,那么你最好在客户端设置一个wcf主机。 它将更简单,更具可扩展性。 此外,客户端和服务器之间的耦合较少。

可扩展架构的最佳双工解决方案最终不使用。

  1. 这将取决于您需要多长时间的新客户以及他们将持续多久。 如果您每次都特别需要一个新客户端,那么池不会是一个选项,但是如果客户端继续做同样的事情,为什么不让它们等待使用它们,如果它们出错,再次重新创建同一个客户端。

  2. 实际上在回调场景中,如果服务正在回调客户端(真正调用客户端上的函数)来传递信息,则服务现在是客户端,反之亦然。 您可以使用正在进行回调的服务。关闭()连接但是它将打开,直到GC可以处理它,根据我的经验可能需要比预期更长的时间。 因此,简而言之,客户端应该负责(客户端是调用某些东西的客户端)来关闭自己,或者断开连接,服务应该只返回答案或从客户端获取数据。

  3. 在双工回调中,现在回调给客户端的服务将获得在duplexchannelfactory后面抽象的客户端的地址。 如果服务无法回调客户端,我认为没有太多可以做的事情,你必须确保客户端正在调用该服务的端口是开放的,以接收我猜的回调。

    上述就是C#学习教程:WCF Duplex客户端的最佳实践分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注&#8212;编程笔记


推荐阅读
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 目录1、将mysql数据导出到SQL文件中(数据库存在的情况)2、将现有的sql文件数据导入到数据库中(前提数据库存在) 3、利用Navicat导出SQL文件和导入SQL文件1)从 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
author-avatar
rita
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有