У меня есть рабочая роль Azure, которая должна запрашивать базу данных SQL на основе Azure для элементов, которые необходимо обновить, выполняет расчет и сохраняет результат. Довольно простая штука, и у меня не было проблем с ее работой в Azure Compute Emulator на моем локальном компьютере, как с LocalDb
, так и с производственной базой данных на основе Azure.
Однако при работе в облаке я получаю следующее исключение, и я понятия не имею, что его вызывает:
Приложение: WaWorkerHost.exe
Версия фреймворка: v4.0.30319
Описание: The process was terminated due to an unhandled exception.
Информация об исключении: System.Data.DataException
Куча:
at System.Data.Entity.Internal.RetryAction`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].PerformAction(System.__Canon)
at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(System.Action`1<System.Data.Entity.Internal.InternalContext>)
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(System.Type)
at System.Data.Entity.Internal.Linq.InternalSet`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].get_InternalContext()
at System.Data.Entity.Infrastructure.DbQuery`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].System.Linq.IQueryable.get_Provider()
at System.Linq.Queryable.Where[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Linq.IQueryable`1<System.__Canon>, System.Linq.Expressions.Expression`1<System.Func`2<System.__Canon,Boolean>>)
at Workzerk.Worker.Events.EventsWorkerRole.Run()
at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.StartRoleInternal()
at Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.<StartRole>b__2()
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()
Этот фрагмент кода работает нормально (в методе OnStart):
string connectionString = RoleEnvironment.GetConfigurationSettingValue("SampleDbConnectionString");
Trace.TraceInformation("The connection string for the database is: " + connectionString);
_db = new SampleDbContext(connectionString);
Правильная строка подключения выводится в журналы.
К сожалению, следующий код вызывает исключение (этот код в методе Run):
Event[] events = _db.Events.Where(x => x.NextOccurence != null).ToArray();
Событие — это один из наших объектов предметной области.
Кто-нибудь знает, что вызывает это исключение, или как мне лучше всего выяснить это?