代码之家  ›  专栏  ›  技术社区  ›  Csaba Toth

为什么Azure WebJob无法连接到Azure SQL,并说“存储帐户的类型不受支持,仅限Blob/ZRS”。支持的类型是“通用的”?

  •  1
  • Csaba Toth  · 技术社区  · 6 年前

    所以我有一个Azure Web应用,它是一个带有实体框架的ASP.NET MVC应用。它使用Azure SQL数据库。我需要定期(一天一次)对金融市场利率数字进行投票,并将其插入数据库。我为两个市场利率调查创建了两个WebJobs(一个需要在市场开放后运行,另一个是在市场关闭后运行),并安排了它们。

    [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();
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Csaba Toth    6 年前

    “存储帐户属于不支持的类型'Blob Only/ZRS'。支持的类型是“通用的”?

    你好像在用 blob storage account 使用Azure webjob。请尝试将azurewebjobstorageconnection字符串更改为其他通用字符串 storage account 连接。

    enter image description here


    另外填充 AzureWebJobsDashboard AzureWebJobsStorage 连接字符串与通用存储帐户的连接字符串 app.settings 你的网络工作。