我有IIS 8應用程序池託管的Web服務。我正在使用log4net進行登錄。IIS應用程序池切換工作線程嗎?
我正在檢查日誌文件中的一些條目,並注意到線程標識符發生了變化。
下面是兩種日誌條目
<event logger="ManageStaticData"
timestamp="2015-08-14T03:00:00.0597938-06:00"
level="INFO"
thread="5916"
domain="Webservice"
username="IIS APPPOOL\WebServices">
<message>Start of static data load.</message>
<global-properties>
<data name="log4net:HostName" value="CC" />
</global-properties>
</event>
<event logger="ManageStaticData"
timestamp="2015-08-14T03:00:00.3410242-06:00"
level="DEBUG"
thread="eba102cb-8224-426e-a2b1-f4e984d4dea7"
domain="Webservice"
username="IIS APPPOOL\WebServices">
<message>Found 1 schedule to be load</message>
<global-properties>
<data name="log4net:HostName" value="CC" />
</global-properties>
</event>
的代碼路徑,顯示這兩個日誌消息只能來自相同的方法。
注意線程值從「5916」更改爲GUID。
大約6秒後,我注意到5916線程開始記錄其他Web服務調用。帶有GUID的線程不再記錄。
爲什麼線程值會改變? log4net是否使用工作線程來記錄條目?或者IIS在過程中以某種方式切換工作線程,聽起來不太可能?或者它是相同的線程,但被重命名?
我很確定他們來自同一個Web請求。我是在測試環境下做的,而且我只調用一次Web服務調用。 Web服務方法還有一個Monitor.TryEnter,可以防止多個Web請求調用同時運行相同的代碼。另外,生成這些註釋的代碼彼此非常接近。 – dsum