1

我目前正在.Net WebApi 2 项目中使用 FoundationDB 进行实验。WebApi 控制器对foundationdb 集群执行一个简单的getrange,一切正常……如果我只运行一次项目。

第二次运行它时,我得到了可怕的api_version_already_set错误,让一切重新启动并运行的唯一方法是重新启动 IIS。我发现了这个类似的问题,答案中提出的唯一“解决方案”是每个应用程序域运行一个进程,这并不理想。

我也尝试过在 .Net 库中使用的这种hack,但它所做的只是将api_version_already_set错误切换到network_already_setupor broken_promise。有没有其他人找到更好的解决方案?

PS:为了临时解决这个问题,我将 WebApi 作为自己的主机运行,这似乎解决了问题,但是在测试环境之外使用 FoundationDB 和 WebApi 很烦人。

4

1 回答 1

0

出于同样的原因,此问题在 5.x 版中仍然存在。每个进程只能创建(和关闭)一次网络线程,因此每个进程使用多个应用程序域的任何主机都将无法工作。似乎没有任何动力来解决这个问题(这主要只影响 .NET 等托管平台,也许是 Java?)。

幸运的是,有了 ASP.NET Core 和像 Kestrel 这样的 Web 主机(进程外,不使用 AppDomains),这个问题将变得没有意义。

这仍然会导致单元测试运行器出现问题,这些运行器试图在运行之间缓存进程。您需要禁用此缓存功能才能使它们可靠运行。

于 2018-07-12T12:23:06.113 回答