【问题标题】:WCF Web Service with a Singleton COBOL VM带有单例 COBOL VM 的 WCF Web 服务
【发布时间】:2013-06-26 04:09:28
【问题描述】:

我有一个 WCF Web 服务,它在 web.config 中没有并发配置,所以我相信它作为 persession 默认运行。在服务中,它使用 COBOL 虚拟机来执行从 COBOL Vision 文件中提取数据的代码。根据 COBOL VM 的开发人员,它是一个单例。

当不止一个人同时访问该服务时,我会遇到网络服务周期性崩溃。我相信正在发生的事情是,当一个进程正在执行时,另一个单独的进程大约同时出现。第一个过程结束并通过正常的关闭程序关闭虚拟机。第二个进程仍在执行并尝试读取/写入数据,但 VM 已关闭并崩溃。在 Web 服务的构造函数中,创建了一个 VM 的实例,当一系列方法完成后,服务被清理,VM 被关闭。

我一直在阅读 WCF Web 服务中的单例并发,并认为我可能需要改用这个。通过这种方式,我可以打开 COBOL VM 并使其永远保持活动状态,并消除我在方法中关闭 VM 的代码。我需要在请求之间共享的唯一数据是 COBOL VM 的状态。

我正在考虑的替代方案是创建一个服务器进程来管理打开 VM 并使其保持活动状态,并允许 Web 服务通过该进程发出读/写请求。

这听起来像是正确的道路吗?我基本上是在寻找一种方法来让虚拟机在 WCF Web 服务情况下保持活动状态,并继续针对它执行代码。 COBOL VM 系统向我发回有关读取/写入的锁定信息,我可以使用这些信息来处理重试或等待。

谢谢, 马丁

【问题讨论】:

    标签: wcf service concurrency virtual-machine


    【解决方案1】:

    Web 服务现在标记为:

    [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
    

    据我了解,这一次只允许一个线程通过 Web 服务运行。其他请求排队,直到第一个完成。这是一个适用于我的情况的快速修复,因为我的 Web 服务不需要高并发性。一次收到的请求不会超过几个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多