我目前正在.Net WebApi 2项目中试验FoundationDB。WebApi 控制器对 foundationdb 集群执行一个简单的 getrange,一切正常......如果我只运行一次项目。
第二次运行它时,我收到可怕的api_version_already_set
错误,而重新启动并再次运行所有内容的唯一方法是重新启动 IIS。我发现了这个类似的问题,答案中提出的唯一"解决方案"是为每个应用程序域运行一个进程,这并不理想。
我也尝试过在.Net库中使用的这个技巧,但它所做的只是将api_version_already_set
错误切换到network_already_setup
或broken_promise
。还有其他人找到了更好的解决方案吗?
PS:为了暂时解决这个问题,我将WebApi作为自主机运行,这似乎解决了问题,但是在测试环境之外将FoundationDB与WebApi结合使用很烦人。
出于同样的原因,此问题在版本 5.x 中仍然存在。每个进程只能创建(和关闭)一次网络线程,因此每个进程使用多个应用程序域的任何主机都将不起作用。似乎没有任何动力来解决这个问题(这主要只影响像.NET这样的托管平台,也许是Java?)。
幸运的是,对于 ASP.NET Core和像Kestrel这样的Web主机(进程外,不使用AppDomain),这个问题将变得毫无意义。
这仍可能导致尝试在运行之间缓存进程的单元测试运行程序出现问题。您需要禁用此缓存功能才能可靠地运行。