【发布时间】:2021-01-25 13:28:16
【问题描述】:
我创建了一个通过一些 API 运行的 Azure 函数,所有这些都按预期工作。但是,一旦我添加了一个异步方法来使用身份管理访问数据库。我开始收到以下错误。
Executed 'AzureFunction1' (Failed, Id=215dbf92-b461-4576-94a8-3fe917d67270, Duration=2470ms)Object reference not set to an instance of an object.
我尝试将连接方法更改为异步,以便可以使用await,但我认为可能存在同步问题。然后我真的不确定它指的是哪个变量。我很难弄清楚。
我试图通过放置以下信息从错误中获取更多信息,但无论如何我没有得到太多回报。
catch (Exception e)
{
var error = $"My error text";
logger.LogError(error + Environment.NewLine + e.Message + Environment.NewLine + e.StackTrace +
e.InnerException != null ? Environment.NewLine + Environment.NewLine +
e.InnerException.Message + Environment.NewLine + e.InnerException.StackTrace : "");
}
这是我添加到访问数据库的方法,我在稍后的函数中使用它来将 int 添加到一些 JSON 中。 (之前用 0 测试过)。在本地版本中一切似乎都运行良好,只有在我在部署中测试它时才会出错
public async Task<int> GetCountAsync(Record record)
{
try
{
//get access token from managed identity
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://database.windows.net/");
var connectionString = "Server = tcp:***,Port; Initial Catalog = ***";
using SqlConnection conn = new SqlConnection(connectionString)
{
AccessToken = accessToken
};
conn.Open();
var state = conn.State;
using SqlCommand comm = new SqlCommand();
var withBlock = comm;
withBlock.Connection = conn;
withBlock.CommandText = $"SELECT COUNT(ID)AS 'count'\n";
logger.LogInformation("Query: " + withBlock.CommandText);
var reader = comm.ExecuteReader();
reader.Read();
int count = reader.GetInt32("count");
logger.LogInformation("Count = " + count.ToString());
return count;
}
catch (Exception e)
{
var error = $"Error retrieving the count for this record: {record.ID}";
logger.LogError(error + Environment.NewLine + e.Message + Environment.NewLine + e.StackTrace +
e.InnerException != null ? Environment.NewLine + Environment.NewLine + e.InnerException.Message + Environment.NewLine + e.StackTrace : "");
throw new Exception(error, e);
}
}
根据我的输出,它一直在工作,直到我记录查询然后它抛出一个 500 Internal Server Error 和我在开始时显示的错误。
【问题讨论】:
-
您应该添加更多日志并查看可能导致此 null ref 错误的灰色代码。
标签: c# async-await azure-functions azure-managed-identity