小编Ily*_*kov的帖子

检查HangFire.JobStorage是否已实例化

我有一个ASP.NET MVC应用程序作为Hangfire客户端 - 它排队不同的工作.我正在使用SqlServerJobStorageHangfire.

目前我正在处理一个与Hangfire数据库没有连接的情况,并且未来连接的某个地方正在实例化.

目标是我的ASP.NET MVC应用程序应该在此之前继续工作.连接恢复后,它应该开始排队作业.

因此,应用程序将抛出异​​常Global.asax:

Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("EshopServiceHangfire");
Run Code Online (Sandbox Code Playgroud)

此外,所有工作队列也会抛出异常:

 BackgroundJob.Enqueue<ISomeClass>(x => x.DoSomethingGreat(JobCancellationToken.Null));
Run Code Online (Sandbox Code Playgroud)

我把行Global.asax放在try/catch块中,所以它不会抛出.当有人排队工作时,我想检查一下JobStorage.Current,如果它没有初始化,我会尝试使用相同的代码再次启动它:

Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("EshopServiceHangfire");
Run Code Online (Sandbox Code Playgroud)

有人知道这样做的方法吗?文档没有关于此的信息.

有点像Hangfire.GlobalConfiguration.JobStorage.IsInitialized

从Job enqueue捕获异常也是一种方式,但我不喜欢它,因为它抛出非特定的

InvalidOperationException:尚未初始化JobStorage.Current属性值.您必须在使用Hangfire客户端或服务器API之前进行设置.

非常感谢那些读过这个地方的人)

c# asp.net asp.net-mvc hangfire

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

异常'AMQP操作被中断'(代码= 406)发生在.NET客户端编程中

我有一个2.8.2 RabbitMQ服务器和一个2.8.2客户端DLL,有代码来声明一个队列并得到一条消息,它工作正常(所有参数都正确):

IModel channel=null;

ConnectionFactory factory = new ConnectionFactory ();
factory.HostName = "192.168.68.4";
_QueueName = "172.16.1.1";

factory.UserName = "guest";
factory.Password = "guest";
factory.VirtualHost = "/";

factory.RequestedHeartbeat = 30;

if (factory.Endpoint == null) {
    Console.WriteLine (" factory.Endpoint==null ");
}


// ?????????????IP??
_QueueName = "172.16.1.1";
_RMQConnection = factory.CreateConnection ();

Console.WriteLine ("factory.CreateConnection()");

channel = _RMQConnection.CreateModel ();

channel.QueueDeclare(_QueueName, false, false,false,null);
Run Code Online (Sandbox Code Playgroud)

但是,当我下载3.0.1 RabbitMQ服务器和3.0.1客户端DLL时,我使用相同的代码并具有异常:

AMQP操作被中断:AMQP关闭原因,由Peer启动,代码= 406,text ="PRECONDITION_FAILED - vhost中队列'172.16.1.1'的参数'/'不等同",classId = 50,methodId = 10,原因=

c# exception amqp rabbitmq

8
推荐指数
1
解决办法
2万
查看次数

ASP.NET Core DbContext注入

我有一个ConfigurationDbContext我想要使​​用的.它有多个参数,DbContextOptionsConfigurationStoreOptions.

如何将此DbContext添加到ASP.NET Core中的服务?

我在Startup.cs中尝试了以下内容:

ConfigureServices
....
services.AddDbContext<ConfigurationDbContext>(BuildDbContext(connString));
....


private ConfigurationDbContext BuildDbContext(string connString)
{
    var builder = new DbContextOptionsBuilder<ConfigurationDbContext>();
    builder.UseSqlServer(connString);

    var options = builder.Options;

    return new ConfigurationDbContext(options, new ConfigurationStoreOptions());
}
Run Code Online (Sandbox Code Playgroud)

c# entity-framework dependency-injection entity-framework-core asp.net-core

8
推荐指数
2
解决办法
1万
查看次数

修改中间件响应

我的要求:编写一个中间件,用于过滤来自另一个后续中间件(例如Mvc)的响应中的所有"坏词".

问题:响应的流式传输.因此,当我们FilterBadWordsMiddleware从已经写入响应的后续中间件回到我们的时候,我们对派对来说太迟了......因为响应已经开始发送,这导致了众所周知的错误response has already started......

因此,这是许多不同情况下的要求 - 如何处理它?

.net-core asp.net-core asp.net-core-middleware

8
推荐指数
3
解决办法
5406
查看次数

网络核心Web API JSON序列化-需要以$开头的字段

我正在使用Net Core Web API,需要返回属性名称为“ $ skip”的有效负载。我尝试使用DataAnnotations:

public class ApiResponseMessage
{
    [Display(Name ="$skip", ShortName = "$skip")]
    public int Skip { get; set; }
    [Display(Name = "$top", ShortName = "$top")]
    public int Top { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我只是使用

return Json(payload)
Run Code Online (Sandbox Code Playgroud)

但是,我的响应有效负载如下所示:

"ResponseMsg": {
    "Skip": 0,
    "Top": 3
}
Run Code Online (Sandbox Code Playgroud)

我需要它是:

"ResponseMsg": {
    "$skip": 0,
    "$top": 3
}
Run Code Online (Sandbox Code Playgroud)

解决此问题的最佳选择是什么?我需要编写自己的ContractResolver或Converter吗?

c# asp.net-core json-serialization

7
推荐指数
3
解决办法
5108
查看次数

无法从控制台应用程序中的 appsettings.json 读取连接字符串

我正在使用控制台应用程序尝试 .NET core,但我一直坚持从 .NET Core 读取内容appsettings.json。这是我的代码:

{
    "ConnectionStrings": {
        "DataBaseConnectionString": "Server=xxxxxx"
        }
}
Run Code Online (Sandbox Code Playgroud)

...

var builder = new ConfigurationBuilder()
    //  .SetBasePath("")
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
    .AddEnvironmentVariables();
configuration = builder.Build();

var xx = configuration.GetConnectionString("DataBaseConnectionString");
Run Code Online (Sandbox Code Playgroud)

我的值为 null xx,我做错了什么?谢谢

c# .net-core

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

如何在.NET Core中使用EF DbFirst和MySQL?

我尝试在我的项目中使用EF和MySQL.我补充说:

MySql.Data.EntityFrameworkCore
MySql.Data.EntityFrameworkCore.Design

进入我project.json的工具部分project.json是空的.当我跑:

Scaffold-DbContext "myconnectionstr" MySql.Data.EntityFrameworkCore -OutputDir Models -StartupProject "myproject"
Run Code Online (Sandbox Code Playgroud)

控制台显示错误:

无法在提供程序集MySql.Data.EntityFrameworkCore中找到名为DesignTimeProviderServicesAttribute的预期程序集属性

mysql entity-framework .net-core db-first

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

开发过程中 Web.config 在哪里?

当我发布我的 ASP .Net Core 1.1 MVC Web 应用程序时,我看到 Publish 文件夹包含一个Web.config文件,我可以在其中设置stdoutLogEnabled等。但是,在开发时我根本看不到这个文件 - 看起来它是在什么时候生成的发布...因此,我如何在此文件中设置变量而不必在每次发布后手动编辑文件?

asp.net-core-mvc asp.net-core

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

如何将 JSON (snake_case) 反序列化为动态 (PascalCase)?

这段代码工作正常:

string json = @"{""MyProperty"" : ""bar""}";

var payload = JsonConvert.DeserializeObject<dynamic>(json);

string typedProperty = payload.MyProperty; //contains "bar"
Run Code Online (Sandbox Code Playgroud)

让我们尝试对 Snake_case JSON 执行相同的操作。我们添加了一个SnakeCaseNamingStrategy实际上是处理snake_case的推荐方法。

_snakeSettings = new JsonSerializerSettings()
{
    ContractResolver = new UnderscorePropertyNamesContractResolver()
};

public class UnderscorePropertyNamesContractResolver : DefaultContractResolver
{
    public UnderscorePropertyNamesContractResolver()
    {
        NamingStrategy = new SnakeCaseNamingStrategy();
    }
}           
Run Code Online (Sandbox Code Playgroud)

然后,将设置应用到DeserializeObject呼叫。如果反序列化为静态类型,这些设置将成功应用于 Snake_case JSON:

string snakeJson = @"{""my_property"" : ""bar""}";

var payload = JsonConvert.DeserializeObject<Payload>(snakeJson, _snakeSettings);

string typedProperty = payload.MyProperty; //contains "bar"
Run Code Online (Sandbox Code Playgroud)

好的,将目标类型切换为dynamic

var payload = JsonConvert.DeserializeObject<dynamic>(snakeJson, _snakeSettings);

string …
Run Code Online (Sandbox Code Playgroud)

c# json json.net deserialization .net-core

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

ASP.NET Core 1.1本地化通用服务

我正在制作一个ASP.NET Core 1.1应用程序并尝试设置本地化.

当我在我ValuesController的实现上IStringLocalizer它工作正常并本地化我的资源文件.

public ValuesController(IStringLocalizer<ValuesController> localizer, IService<BaseEntity> service)
{
    _localizer = localizer;
    _service = service;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在"Resources/Controllers/ValuesController.en-US.resx"中找到我的资源.

但是,当我尝试注入IStringLocalizer一个通用服务时,它无法找到我的资源文件.

public class Service<T> : IService<T>
    where T : BaseEntity
{
    #region Properties
    protected IRepository Repository { get; set; }
    protected IUnitOfWorkFactory UnitOfWorkFactory { get; set; }
    private readonly ILogger _logger;
    private readonly IStringLocalizer _localizer;

    #endregion

    #region Ctor
    public Service(IRepository repository, IUnitOfWorkFactory unitOfWorkFactory,
        ILogger<Service<T>> logger, IStringLocalizer<Service<T>> localizer)
    {
        Repository = repository;
        UnitOfWorkFactory = unitOfWorkFactory;
        _logger = …
Run Code Online (Sandbox Code Playgroud)

c# .net-core asp.net-core asp.net-core-localization

5
推荐指数
1
解决办法
523
查看次数