2011-03-13 78 views
0

我正在使用多线程wcf maxConcurrentCalls = 10。通过记录对我的服务的调用,我看到10个不同的线程正在我的服务类中执行,并且它们在以下调用中被重用。销毁一个wcf线程

我可以告诉WCF销毁/删除一个线程,以便在下次调用时创建一个新线程吗?

这是因为我有线程静态状态,有时我想清除(在意外的异常)。我正在使用线程静态范围来获得性能。

+4

在手动不控制线程的情况下使用ThreadStatic是不好的设计。 – 2011-03-13 12:06:28

回答

1

WCF不会创建新的线程。它使用线程池中的线程来处理请求。所以当一个请求开始时,它会从这个池中绘制一个线程来执行请求,并在完成之后将线程返回到池中。 WCF使用下面的线程的方式是您不应该依赖的实现细节。你不应该在ASP.NET/WCF中使用线程静态来存储状态。

在ASP.NET中,你应该使用HttpContext.Items和WCF OperationContext存储一些状态,这将是可通过整个请求。

这里是一个good blog post你可以看看它说明了一个很好的方式来抽象。

+0

这不是一个asp.net场景 – Stig 2011-03-13 12:06:22

+1

@Stig,是的,这是一个WCF场景。类似的规则:不要在线程无法控制的场景中使用线程静态。按照我的建议使用OperationContext。 – 2011-03-13 12:07:51

+0

实际上,我正在使用Structuremap在线程静态作用域中提供实例。 – Stig 2011-03-13 12:13:16