【发布时间】:2018-08-25 22:45:11
【问题描述】:
所以我有一个 Azure Web 应用程序,它是一个带有实体框架的 ASP.NET MVC 应用程序。它使用 Azure SQL 数据库。我需要定期(每天一次)轮询金融市场汇率数字并将其插入数据库。我为两个市场利率调查创建了两个 WebJobs(一个需要在开市后运行,另一个在收市后运行)并安排它们。
为了进行测试,我通过 Azure 门户手动触发它们,我在日志中收到以下错误:
[08/25/2018 22:28:43 > a6e3be: ERR ] Unhandled Exception: System.InvalidOperationException: Storage account 'blabla' is of unsupported type 'Blob-Only/ZRS'. Supported types are 'General Purpose'
[08/25/2018 22:28:43 > a6e3be: ERR ] at Microsoft.Azure.WebJobs.Host.Storage.StorageAccountExtensions.AssertTypeOneOf(IStorageAccount account, StorageAccountType[] types)
[08/25/2018 22:28:43 > a6e3be: ERR ] at Microsoft.Azure.WebJobs.Host.Executors.DefaultStorageAccountProvider.<CreateAndValidateAccountAsync>d__24.MoveNext()
[08/25/2018 22:28:43 > a6e3be: ERR ] --- End of stack trace from previous location where exception was thrown ---
[08/25/2018 22:28:43 > a6e3be: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
[08/25/2018 22:28:43 > a6e3be: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
[08/25/2018 22:28:43 > a6e3be: ERR ] at Microsoft.Azure.WebJobs.Host.Executors.DefaultStorageAccountProvider.<TryGetAccountAsync>d__25.MoveNext()
[08/25/2018 22:28:43 > a6e3be: ERR ] --- End of stack trace from previous location where exception was thrown ---
[08/25/2018 22:28:43 > a6e3be: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
[08/25/2018 22:28:43 > a6e3be: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
[08/25/2018 22:28:43 > a6e3be: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
[08/25/2018 22:28:43 > a6e3be: ERR ] at Microsoft.Azure.WebJobs.Host.Executors.JobHostConfigurationExtensions.<CreateJobHostContextAsync>d__1.MoveNext()
[08/25/2018 22:28:43 > a6e3be: ERR ] --- End of stack trace from previous location where exception was thrown ---
[08/25/2018 22:28:43 > a6e3be: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
[08/25/2018 22:28:43 > a6e3be: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
[08/25/2018 22:28:43 > a6e3be: ERR ] at Microsoft.Azure.WebJobs.JobHost.<InitializeHostAsync>d__44.MoveNext()
[08/25/2018 22:28:43 > a6e3be: ERR ] --- End of stack trace from previous location where exception was thrown ---
[08/25/2018 22:28:43 > a6e3be: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
[08/25/2018 22:28:43 > a6e3be: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
[08/25/2018 22:28:43 > a6e3be: ERR ] at Microsoft.Azure.WebJobs.JobHost.<CallAsyncCore>d__37.MoveNext()
[08/25/2018 22:28:43 > a6e3be: ERR ] --- End of stack trace from previous location where exception was thrown ---
[08/25/2018 22:28:43 > a6e3be: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
[08/25/2018 22:28:43 > a6e3be: ERR ] at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
[08/25/2018 22:28:43 > a6e3be: ERR ] at Microsoft.Azure.WebJobs.JobHost.Call(MethodInfo method)
[08/25/2018 22:28:43 > a6e3be: ERR ] at MarketRatePreviousCloseWebJob.Program.Main() in C:\Users\Csaba\Documents\BlablaSrc\MarketRatePreviousCloseWebJob\Program.cs:line 20
[08/25/2018 22:28:43 > a6e3be: SYS INFO] Status changed to Failed
[08/25/2018 22:28:43 > a6e3be: SYS ERR ] Job failed due to exit code -532462766
我无法理解这一点。 SQL Azure 数据库有点普通,一些表有 blob 列,但没有 MarketRates 表。 尝试访问数据库的代码:
string connectionString = "Copy of the the Azure SQL connection string";
SqlConnection sqlConnection = new SqlConnection(connectionString);
string selectStatement = "SELECT MAX(Id) FROM BlaBla.dbo.MarketRates";
SqlCommand selectCmd = new SqlCommand(selectStatement, sqlConnection);
sqlConnection.Open();
var id = (int)selectCmd.ExecuteScalar();
sqlConnection.Close();
string insertStatement = "INSERT INTO BlaBla.dbo.MarketRates(Id, Type, Rate, Date) " +
"VALUES(@Id, @Type, @Rate, @Date)";
SqlCommand insertCmd = new SqlCommand(insertStatement, sqlConnection);
var now = DateTime.Now;
insertCmd.Parameters.Add("@Id", SqlDbType.Int);
insertCmd.Parameters.Add("@Type", SqlDbType.VarChar, 64);
insertCmd.Parameters.Add("@Rate", SqlDbType.Float);
insertCmd.Parameters.Add("@Date", SqlDbType.DateTime);
insertCmd.Parameters["@Id"].Value = id + 1;
insertCmd.Parameters["@Type"].Value = rateType;
insertCmd.Parameters["@Rate"].Value = rate;
insertCmd.Parameters["@Date"].Value = now.Date;
sqlConnection.Open();
insertCmd.ExecuteNonQuery();
sqlConnection.Close();
【问题讨论】:
-
Blabla 是数据库名称吗?您能否尝试删除
select和insert查询中的Blabla.dbo.MarketRates。 -
是的,“Blabla”是数据库名称(显然不完全是,我想保护实际应用程序的身份)。我从在该 Azure SQL 数据库上远程打开的远程 Visual Studio 执行其他代码,在这些脚本中,“Blabla.dbo.*”表符号似乎运行良好。如果错误出现在 SQL 语句中,我想知道为什么我没有更多指向该错误的本地化错误。
-
我看到你已经在github关注这个问题。你能找到哪一行你得到了这个错误吗?另外,请分享您的网络作业的完整代码(我的意思是从初始步骤
public static async Task Run) -
您的 WebJob 似乎配置为指向非通用存储帐户。我知道这听起来很明显,但在我看来,您混淆了为 WebJob 配置的 存储帐户 与自定义 WebJob 代码连接到的 Azure SQL 数据库。在您的应用设置中查找
AzureWebJobsStorage等,并确认它指向通用存储帐户。 -
@KirkLarkin 你是对的。我的 Web 应用程序的“主”存储帐户是 blob 类型。这就是工作抱怨的原因。我还没有对 RTFSC(阅读精细源代码)进行尽职调查,并且在 Job 的应用程序配置文件中,存储帐户的两个连接字符串(
AzureWebJobsDashboard和AzureWebJobsStorage)是空白的。我用相同的 conn 填充它们。字符串并解决了它。我应该写我的答案还是你愿意我可以接受?
标签: c# azure azure-sql-database azure-webjobs