ASP.NET параллелизм - PullRequest
       6

ASP.NET параллелизм

0 голосов
/ 04 апреля 2009

У меня есть приложение ASP.NET, которое запускает длительную операцию во время фазы обработчика событий в жизненном цикле страницы ASP.NET. Это происходит, когда конечный пользователь нажимает кнопку, к базе данных выполняется несколько запросов, создается группа карт, а затем из изображений в формате jpeg создается фильм. Этот процесс может занять более минуты, чтобы завершить.

Вот ссылка на приложение http://maxim.ucsd.edu/mapmaker/cbeo.aspx

Я попытался использовать поток из пула потоков, создать и запустить свой собственный поток и использовать платформу AsyncCallback. Проблема в том, что новый поток запускается под другим идентификатором пользователя. Я предполагаю, что основной поток запускается под ASPNET, новый поток запускается под AD \ MAXIM $, где MAXIM - имя хоста. Я знаю это, потому что при попытке подключения к базе данных возникает ошибка.

Почему новый поток имеет другой идентификатор пользователя? Если мне удастся выяснить проблему с идентификатором пользователя, я хотел бы проверить, завершился ли процесс создания фильма, изучив переменную Session в методе Page_Load, а затем добавить ссылку на страницу для доступа к фильму.

Есть ли у кого-нибудь хорошие примеры использования параллелизма в приложении ASP.NET, которое использует или создает потоки в обратном вызове EventHandler?

Спасибо, Matt

Ответы [ 3 ]

2 голосов
/ 04 апреля 2009

Вы читали это ?: http://msdn.microsoft.com/en-us/magazine/cc163725.aspx

Цитируя одну релевантную часть из этой ссылки (вы должны прочитать всю статью):

Последний момент, о котором следует помнить при создании асинхронных страниц, заключается в том, что не следует запускать асинхронные операции, которые заимствуют из того же пула потоков, который использует ASP.NET.

0 голосов
/ 04 апреля 2009

Проблема в том, что новый поток запускается с другим идентификатором пользователя. Я предполагаю, что основной поток запущен в ASPNET, новый поток запущен в AD \ MAXIM $, где MAXIM - имя хоста.

ASPNET - это локальная учетная запись, когда запрос передается по сети, он использует учетные данные компьютера (AD \ MAXIM $).

То, что может может происходить, это то, что вы выполняете роль подражания в запросе, а не в ThreadPool. Если это так, вы можете сохранить текущую WindowsIdentity для запроса, а затем выдать себя за эту личность в ThreadPool.

Или просто разрешите ThreadPool работать с БД с помощью Sql Authentication (имя пользователя и пароль).

0 голосов
/ 04 апреля 2009

Не решается конкретная проблема, о которой вы спрашивали, но она, скорее всего, скоро появится:

В какой момент используется это видео?

  • Если он отображается на странице или загружен пользователем, как выглядит сгенерированный html, который браузер использует для получения видео? Браузер должен вызвать это видео где-нибудь, используя отдельный http-запрос, и вы могли бы добиться большего, создав отдельный обработчик http (* .ashx file) для обработки этого запроса и просто написав URL-адрес этого обработчика на своей странице. *
  • Если это для хранения или просмотра в другом месте, вам следует подумать о том, чтобы просто сохранить информацию, необходимую для создания видео на данный момент, и отложить фактическую работу до окончательного запроса видео.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...