ASP.NET Threading не работает в производстве - PullRequest
1 голос
/ 11 февраля 2009

По какой-то странной причине я не могу запускать какие-либо функции в качестве нового потока в моей производственной среде, хотя он отлично работает локально и нормально на промежуточном сервере, который имеет те же характеристики, что и рабочий сервер (Windows 2003, IIS 6) * * тысяча одна

Вот мой код:

System.Threading.Thread th = new System.Threading.Thread(TestFunction);
th.Start();

А это функция:

public void TestFunction()
{
   LogUtility.Log("hello world");
}

После th.Start больше ничего не доступно. Есть ли какие-то настройки, которые могут вызвать такое поведение? th.ThreadState возвращает «выполняется» в течение срока действия TestFunction.

(LogUtility.Log просто записывает текст в файл)

РЕДАКТИРОВАТЬ: Это на самом деле работал раньше, и он просто перестал работать из ниоткуда.

Ответы [ 3 ]

1 голос
/ 11 февраля 2009

Оказывается, это потому, что я использовал олицетворение, и олицетворение не применяется при создании нового потока. Вот как я это исправил, так что поток использует то же подражание, что и вызывающая функция:

public static WindowsIdentity ident;

public void ProcessRequest(HttpContext context)
{
    ident = WindowsIdentity.GetCurrent();
    System.Threading.Thread th = new System.Threading.Thread(ThreadedFunction);
    th.Start();
}

public void ThreadedFunction()
{
    WindowsImpersonationContext c = null;
    try
    {
        c = ident.Impersonate();
        // Your code here
    }
    finally
    {
        if (c != null) c.Undo();
    }
}
0 голосов
/ 11 февраля 2009

Вы уверены, что это не просто сбой LogUtility? Я бы не стал так быстро подозревать систему потоков, когда существует гораздо более простое объяснение:).

0 голосов
/ 11 февраля 2009

Может ли это быть связано с безопасностью? Операции с потоками требуют довольно высоких привилегий CAS (Code Access Security), и в среде хостинга вы можете использовать ограниченные привилегии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...