小编sro*_*oll的帖子

.NET 通用主机:防止应用程序因未处理的异常而崩溃

我有一个 .NET 通用主机,IHostedService它从 OPC-UA 接口接收事件并处理它们。

问题是,如果在处理事件的过程中出现未处理的异常,整个应用程序就会崩溃

我阅读了文档,但没有找到关于全局异常处理程序或允许捕获未处理异常并防止应用程序崩溃的类似机制的任何信息。

是否有保护通用主机以及IHostedService防止未处理异常的解决方案?

编辑

我知道,这里最简单的事情是尝试/捕获异常而不是让它冒泡。但是我想知道是否有类似 WinForms / WPF 的机制,您可以在其中更全局地捕获此类异常并防止崩溃。

编辑

这是代码的简化版本:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args)
    {
        var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
        return new HostBuilder()
            .UseEnvironment(environmentName)
            .ConfigureLogging((hostContext, logging) =>
            {
                ...
            })
            .ConfigureAppConfiguration((hostContext, builder) =>
            {
                builder
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json", true, true)
                    .AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", true, true)
                    .AddEnvironmentVariables();
            })
            .ConfigureServices((hostContext, services) =>
            {
                services.AddSingleton<IHostedService, OpcClientHostedService>();
                ...
            });
    }
}

public class OpcClientHostedService : …
Run Code Online (Sandbox Code Playgroud)

c# .net-core asp.net-core asp.net-core-hosted-services

9
推荐指数
1
解决办法
3517
查看次数

实体框架核心连接管理

在 asp.net 核心项目中,我需要一个加密的 SQLite 数据库。为此,我制作了自己的方法SqliteEncryptedConnection,它继承自Microsoft.Data.Sqlite.SqliteConnection并在Open()方法中设置加密密钥(执行 PRAGMA key = ...)

我有一个扩展方法,它通过创建一个连接并提供它来配置我的 EF 上下文。

    public static void UseEncryptedSqlite(this DbContextOptionsBuilder optionsBuilder, string connectionString, string password)
    {
        var connection = new SqliteEncryptedConnection(connectionString, password);
        connection.Open();
        optionsBuilder.UseSqlite(connection);
    }
Run Code Online (Sandbox Code Playgroud)

我必须先打开连接,然后才能将其提供给 EF,否则 EF 会为每个单个查询自动打开和关闭连接,并且该Open()方法现在非常昂贵。

我对这个解决方案的问题是我的连接永远不会被处理或关闭!

  1. 在 Open 中设置加密密钥是否正确?
  2. 有没有办法知道上下文何时被处理?还是配置它在处理后关闭并处理连接?
  3. 是否有另一种(更好的)方法来管理连接?

肮脏的解决方案是在 EF 上下文的 Dispose 方法中处理连接,但我真的不想处理注入而不属于上下文的依赖项。

.net sqlite entity-framework-core asp.net-core

6
推荐指数
1
解决办法
3946
查看次数

VS2015的Typescript 1.5没有互联网接入

是否有可能在没有互联网接入的visual studio 2015上安装typescript 1.5?由于VS2015"开箱即用",似乎没有安装程序(除了1.5测试版)

但是,如果您没有Internet访问权限,则VS安装会以警告结束,因为它无法下载打字稿工具.最后,扩展名列表中没有打字稿工具

visual-studio-2015 typescript1.5

3
推荐指数
1
解决办法
2338
查看次数