0

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

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

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

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

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

谢谢,马丁

4

1 回答 1

0

Web 服务现在标记为:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]

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

于 2012-08-23T12:22:15.617 回答