У меня есть веб-задание Azure, развернутое с помощью моего веб-приложения MVC Azure. Это задание имеет две функции, запускаемые очередью: одна берет PDF-файл и разбивает его на отдельные изображения страниц, а вторая обрабатывает отдельные страницы. Я использую EF 6 и Unity как на веб-сайте, так и в веб-работе.
Используя параметр IJobActivator, у меня нет проблем с внедрением моего DbContext и UoW/Services/Repositories в веб-задание. Проблема возникает, когда я пытаюсь запустить веб-задание параллельно. Если я установлю для параметров конфигурации веб-задания значение config.Queues.BatchSize = 1, все будет хорошо, но медленно (последовательно, по одной странице за раз). Если я увеличу BatchSize до значения выше 1, я получу ошибки в строке «Вторая операция, начатая в этом контексте, до завершения предыдущей асинхронной операции». Поскольку DbContext вводится, я пытался возиться с параметрами LifetimeManager, чтобы увидеть, была ли проблема в этом - без изменений. В ошибке говорится, что мне нужно убедиться, что все мои вызовы EF используют «ожидание» (асинхронные), но они ... так что это не проблема.
Полезность веб-задания серьезно уменьшится, если я не смогу запускать его параллельно. есть идеи? Было бы лучше отказаться от EF и DbContext в веб-задании и просто использовать ADO.Net для прямого доступа к БД?
Database.SetInitializer<T>(null)
для вашего контекста? Вы также можете запустить WebJob локально и использовать VS intellitrace, чтобы увидеть, какие операторы выполняются, когда. 10.12.2015