IIS中的请求是否会在单个线程上运行?

Shi*_*iji 8 c# asp.net iis multithreading

我们有一个在IIS中运行的系统.

系统应始终使用相同的"文化"运行,但我们不能依赖正确设置的服务器设置.

一种方法是在每次进行ToString时指定文化.

但是,我们想知道,是否有可能在方法开始时在一个线程上设置文化并依赖该方法中的所有代码在同一个线程上运行?

Jon*_*eet 19

不是.ASP.NET表现出线程敏捷性 - 在某些情况下,请求可能会在其请求生命周期中的特定点从一个线程移动到另一个线程.(它不是"只是在任何地方"; 这篇博文提供了更具体的细节.)

不幸的是,这并没有像它可能那样清楚地记录下来,并且它很难被激发 - 所以你可以很容易地进入测试负载的情况,一切都很好 - 但是在生产中出问题.

但是,我之前运行的一些测试(在页面中查找"jskeet")表明Thread.CurrentCulture即使在线程敏捷性开始时也会保留.


Fen*_*ton 2

你会动态地改变文化吗?如果没有,您可以在 web.config 文件中设置区域性。

<system.web>
  <globalization culture="ja-JP" uiCulture="zh-HK" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

您还可以在页面级别设置它:

<%@Page Culture="fr-FR" Language="C#" %>
Run Code Online (Sandbox Code Playgroud)

并在线程上:

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Run Code Online (Sandbox Code Playgroud)

但对于您正在使用的内容,页面级别或 web.config 级别似乎可能是最合适的。