【问题标题】:Service modification to per-session对每个会话的服务修改
【发布时间】:2016-02-11 18:12:12
【问题描述】:

我有一个系统,其中已经为特定进程设置的服务曾经有一个 dingle 实例模式。该服务用于运行一个只能为一个客户端服务的长进程。架构如下:


现在我正在尝试为每个会话创建此 wcf 服务,以便它可以同时为两个或多个客户端运行长时间操作。因为这个过程通常需要时间。我还使用回调通道将完成百分比发送回客户端。架构如下图所示:


两种架构的主要区别在于:

  1. 以前只有一个用户可以运行多个进程 objects.Now 每个用户都可以运行漫长的过程,但对于不同的 对象。
  2. 我们在新架构中添加了回调功能 每会话服务。
  3. 我们还计划为用户提供便利 终止进程,如果他愿意或客户端连接是 关闭。

    但在尝试实现上述目标时,我们面临以下问题。

    1. 耗时较长的操作,发生在数据库中,借助 static datamanager 类中的多个存储过程一一调用。
    2. 每个 SP 负责在多个表中添加大约 500k 行。
    3. 虽然从客户端终止连接会删除服务实例,但由于数据库操作是在静态类中完成的,因此控件会卡在那里,一切都停止响应。
    4. 我知道有一个 DBCommand.Cancel() 方法可以停止与 DBCommand 关联的操作,但由于该类是静态取消,所以这也是不可能的。

请提出解决此问题所需的架构更改。我准备分享更多细节。

【问题讨论】:

  • 您真的需要将 DataManager 设为静态类吗?如果每个客户端都有自己的 DataManager 实例和可以取消的 DbCommand 会更好吗?
  • 是的,我同意,该体系结构是一个非常庞大而古老的系统的一部分。由于服务以前是单实例服务,因此静态类是一个不错的选择。但是随着这个服务的变化,静态类就出现了问题。我只想要在架构上处理这种情况的最佳方式。
  • 据我了解,您希望同时拥有多个客户端,而导致单例的静态行为不匹配。我会纠正的。但也许我什么都不懂
  • 是的,这正是我需要的,如果没有办法让它与静态一起工作,因为重构会很麻烦。
  • 感谢您的精彩解释和图表

标签: c# sql wcf architecture


【解决方案1】:

据我了解,您希望同时拥有多个客户端,而导致 singletonstatic 行为不匹配。

我会纠正那个。

问候

【讨论】:

    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 2012-06-26
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多