0

我已经开发了基于 asp.net core 3.1 的 web api,并根据以下文档实现了 HealthCheck 和 HealthCheckUI:https ://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks

在原始项目中实施它之前,我已经开发了一个 POC,它按预期工作得很好。

现在我尝试在利用 Azure Kubernetes 服务并部署在 Azure Dev Spaces 中的原始项目中做同样的事情。

这是我的代码:

启动.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddCustomHealthChecks(Configuration);
}

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
        app.UseEndpoints(builder =>
        {
            builder.MapHealthChecks("/health", new HealthCheckOptions()
            {AllowCachingResponses = false}).RequireCors(CorsPolicyName.AllowAny);
            builder.MapHealthChecks("/healthcheck", new HealthCheckOptions()
            {Predicate = _ => true, ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse}).RequireCors(CorsPolicyName.AllowAny);
        }    
        app.UseHealthChecksUI();
  }


public static IServiceCollection AddCustomHealthChecks(this IServiceCollection services, IConfiguration configuration)
{
    var cosmosDBServiceEndPoint = configuration.GetValue<string>("CosmosDBEndpoint");
    var cosmosDBAuthKeyOrResourceToken = configuration.GetValue<string>("CosmosDBAccessKey");
    var cosmosDBConnectionString = $"AccountEndpoint={cosmosDBServiceEndPoint};AccountKey={cosmosDBAuthKeyOrResourceToken};";
    var hcBuilder = services.AddHealthChecks();
    hcBuilder.AddCheck("self", () => HealthCheckResult.Healthy()).AddCosmosDb(connectionString: cosmosDBConnectionString, name: "CosmosDB-check", failureStatus: HealthStatus.Degraded, tags: new string[]{"cosmosdb"});


    services.AddHealthChecksUI();
    return services;
}

在 Azure Dev Space 中部署上述代码时,出现以下错误:

An exception occurred while iterating over the results of a query for context type 'HealthChecks.UI.Core.Data.HealthChecksDb'.
      Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'near "(": syntax error'.
         at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db)
         at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements(Stopwatch timer)+MoveNext()
         at Microsoft.Data.Sqlite.SqliteCommand.GetStatements(Stopwatch timer)+MoveNext()
         at Microsoft.Data.Sqlite.SqliteDataReader.NextResult()
         at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior)
         at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)
         at Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)
         at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
         at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
         at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
         at Microsoft.EntityFrameworkCore.Query.RelationalShapedQueryCompilingExpressionVisitor.AsyncQueryingEnumerable`1.AsyncEnumerator.MoveNextAsync()

谁能帮我知道如何解决这个问题?

4

0 回答 0