【发布时间】:2012-12-31 02:56:17
【问题描述】:
我有一个托管在 IIS 中的 WCF 服务,它调用线程不安全的非托管库。
我需要以某种方式设置 IIS,以便它保留一个进程池并为每个进程分配一个请求。
我该怎么做?
解释线程不安全的性质: 非托管库包含进程范围的共享静态数组,该数组在操作开始时归零,然后在操作期间缓慢(30s-3m)填充结果,然后将最终结果返回给我。调用不是 CPU 密集型的,数据是从外部来源收集的。 进行顺序调用是安全的,但任何并行调用都会导致数组中的数据损坏,并且两个调用都返回错误的结果。 我无法控制这个库。
我需要能够并行处理 30-100 个请求。
【问题讨论】:
-
你能解释一下为什么你的非托管库不安全吗?如果是因为内存和对象的状态,那么您不一定需要运行多个进程。您可以通过每个会话或调用拥有它自己的服务实例,从而分离非托管对象的实例。
-
@TylerOhlsen 我已经更新了问题。
-
这个共享静态数组是per thread还是per process?
-
@AllonGuralnek 每个进程
标签: .net wcf iis thread-safety unmanaged