小编S. *_*nke的帖子

如何在 ASP.NET Core 2.1 中的计时器上运行 BackgroundService

我想在 ASP.NET Core 2.1 中运行后台作业。它必须每 2 小时运行一次,并且需要访问我的 DI 容器,因为它将在数据库中执行一些清理工作。它需要async并且应该独立于我的 ASP.NET Core 2.1 应用程序运行。

我看到有一个IHostedService,但 ASP.NET Core 2.1 还引入了一个名为的抽象类BackgroundService,它为我做了更多的工作。看起来不错,我想用它!

不过,我一直无法弄清楚如何运行源自BackgroundService计时器的服务。

我是否需要ExecuteAsync(token)通过记住它上次运行的时间并确定这是否是 2 小时来配置它,或者是否有更好/更清晰的方法来说明它必须每 2 小时运行一次?

另外,我解决问题的方法是否正确BackgroundService

谢谢!

编辑:

将此发布在MS 扩展存储库上

c# background-process background-service asp.net-core asp.net-core-2.1

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

我应该更新我的 npm 版本还是使用 node.js 提供的一个版本?

我有一个使用 node.js 14.16.0 的项目。我和我的团队成员都使用那个版本。我使用 npm 6.14.11 而我的团队成员使用 npm 7.xx 这导致 package-lock.json 不同;该lockFileVersion属性在我的 PC 上为 1,但在他们的 PC 上为 2。

我已经使用nvm并且正在考虑添加一个,.nvmrc以便每个人始终使用相同的节点版本,但这并不能解决 npm 版本问题。

我相信使用已安装的 node.js 版本提供的 npm 版本是个好主意。如果下一个大型 LTS 版本使用新的 npm 版本,项目将切换到该版本。但是在NPM 的网站上,他们说:

npm 是一个独立于 Node.js 的项目,更新频率更高。因此,即使您刚刚下载了 Node.js(以及 npm),您也可能需要更新您的 npm。幸运的是,npm 知道如何自我更新!

这让我相信我应该经常更新。

但他们也说:

Node.js 有很多版本!要有效地使用 Node.js 以及 npm,您需要确保您使用的是 Node.js 团队支持的版本。通常,您应该使用标记为“LTS”的 Node.js 版本。

这让我相信我不应该更新而只使用 node.js 提供的一个。

最佳做法是什么?NPM 没有 LTS 的概念吗?

versioning node.js npm package.json

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

Xamarin表格的本地通知?

我正在学习如何使用Xamarin表单,我想在Xamarin Forms上实现(推送)通知.我用Google搜索但无济于事.有谁知道如何使用Xamarin Forms实现本地/推送通知?我将在以后使用实际的服务器,但现在只是在我按下按钮时显示通知,对我来说完全没问题.

谢谢你的帮助!

编辑:

我现在使用DependencyService来访问Device OS的通知系统,而不是尝试使用Xamarin Forms本身.不再需要这个问题的答案了!

c# notifications xamarin xamarin.forms

6
推荐指数
3
解决办法
7074
查看次数

即使MessageVersion是Soap11WSAddressing10,WCF也在使用SOAP 1.2

我的问题如下.我收到了一个在我的.NET 4.7.1 ASP.NET应用程序中实现的WSDL,因此另一家公司可以从我们实现的WSDL调用一个操作.它们需要一些特定的WCF服务设置.

  • SOAP 1.1
  • WS-Security 1.0
  • WS-Addressing 1.0(2005-08)
  • HTTPS(使用x509证书)
  • 他们要求我们安装一个特定的证书,我们可以用我们的证书验证他们的证书,反过来他们也会验证我们的证书,因为他们有我们的公钥.我相信我应该用Custom Binding -> Security -> MutualCertificate它.我已经指定了应该使用的服务和客户端证书.

(请注意,在WSDL实现不需要WCF,他们说,消费者可以自由地实现它在任何语言.我选择使用WCF,他们有一些关于它的文档,所以我认为它应该得到支持.)

当我直接在SOAP UI中导入他们的WSDL时,它说它使用SOAP 1.1.SOAP 1.1命名空间在WSDL中可见.

当我导入我的服务的WSDL(它依次实现其WSDL生成的接口)时,它使用SOAP 1.2.这是一个不匹配,非常烦人.

我发现这篇文章:https://stackoverflow.com/a/22255554/3013479我试图删除HttpSoap12并添加HttpSoap.我已设置MessageVersionSoap11WSAddressing10所以它应该使用SOAP1.1 ..但它不起作用.

当我在BasicHTTPBinding没有任何配置的情况下使用该绑定时,它确实使用SOAP 1.1

这是我的约束力:

<customBinding>
    <binding>
        <textMessageEncoding writeEncoding="utf-8" messageVersion="Soap11WSAddressing10" />
        <security
            authenticationMode="MutualCertificate"
            enableUnsecuredResponse="false"
            messageProtectionOrder="EncryptBeforeSign"
            includeTimestamp="true"
            defaultAlgorithmSuite="TripleDesRsa15"
            allowSerializedSigningTokenOnReply="false"
            messageSecurityVersion="WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10"/>
      <httpsTransport requireClientCertificate="true"/>
    </binding>
  </customBinding>
Run Code Online (Sandbox Code Playgroud)

我相信我需要一个自定义绑定,因为在他们的一个文档中,他们提到了自定义绑定的一些属性.我不确定!此外,此绑定生成一个AssymetricBinding,我相信没有其他默认绑定执行此操作.

有人有任何提示吗?你们需要WSDL的知识吗?从理论上讲,我无法/允许调整WSDL,因为那时服务可能无法连接到我们.如果我确实需要调整WSDL,请告诉我为什么我可以与公司沟通.

c# asp.net wcf soap web-services

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

如何使用 Visual Studio 2019 和 C# 一次性添加所有缺失的使用

当我编写 C# 时,我有时会缺少 3-4 个使用,我可以使用工具提示窗口添加它们 -> 添加缺失使用,或执行 ctrl + 。在缺少 using 的行上。

这样做3-4次相当烦人。

我注意到有时“添加所有丢失的使用”工具提示有效,但我无法让它可靠地弹出。

我知道 resharper 有它,但我不想为此功能使用付费扩展。

我怎样才能可靠地弹出这个“添加所有缺失的使用”,或者我可以通过什么其他方式一次添加所有缺失的使用?

谢谢!

c# visual-studio visual-studio-2019

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

如何使用 Nswag 为我的 API DTO(基于生成器)指定不同的名称?

我有一个 .NET 5.0 ASP.NET Core 项目,我正在使用它Nswag来生成 API 客户端。假设我有以下 API 模型:

public class GetFooListResponseModel
{
    public string Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想要的是两件事。让我们从基本的开始。

  • 如何使生成的 API 客户端模型名称与我的项目中的模型名称不同?例如,我希望调用生成的打字稿模型而Foo不是GetFooListResponseModel.
  • 我可以根据它生成的客户端让它们具有不同的名称吗?例如,对于我的 C# 客户端,我完全可以接受现有的模型名称,但需要更改打字稿名称。如果这是不可能的,那也没什么大不了的,但那就太好了。

非常感谢!

c# asp.net-core openapi nswag nswagstudio

6
推荐指数
2
解决办法
2262
查看次数

在 Azure Pipelines 中缓存 npm ci 是一个坏主意吗?

今天我正在查找一些有关 Azure Pipelines 中的缓存以及安装 NPM 包的信息。我们npm ci在管道中使用这可能需要一段时间。缓存可能会加快速度(并引入其他风险),我想知道缓存npm ci在 CI/CD 管道中是否是一个好主意,因为我发现了很多关于此的相互矛盾的信息。

缓存有什么好处?

如果我阅读官方文档,内容如下:

因为npm ci删除node_modules文件夹是为了确保使用一致、可重复的模块集,所以您应该node_modules在调用npm ci.

造成如此缓慢的原因npm ci是它必须检索所有node_modules. 但我从上面这句话中可以得出的唯一结论是我们不应该缓存node_modules。那么,如果未缓存,启用该缓存任务有什么意义呢?我的假设是,如果不缓存,您就会失去缓存所带来的速度优势。npm cinode_modulesnode_modules

缓存很危险,对吗?

npm ci提供基于package-lock.json. 但是,如果您将缓存添加到混合中并node_modules从缓存而不是服务器检索一些包,则会产生检索陈旧/过时/错误包的风险,因为缓存失效很难。

基于此,缓存npm ci永远不应该一起使用,对吧?

相互矛盾的信息

前面的标题告诉我,我不应该尝试npm ci通过在天蓝色管道中使用缓存来加快速度。但是,如果您使用您最喜欢的搜索引擎并搜索azure pipelines cache npm,您会发现很多资源告诉您具体如何执行此操作。包括堆栈溢出的答案:

您还可以找到更多。为什么会有这么多相互矛盾的信息? …

continuous-integration caching node.js npm azure-pipelines

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

使 EF Core 2 仅使用 getter 属性而无需支持字段

我的目标是使用以下代码使 Entity Framework 2 运行良好:

public class Foo
{
    public Guid Id { get; } // This should NOT change

    public string NotRequiredProperty {get; set;}

    public Foo(Guid id) => Id = id;

    private Foo() { } // Empty constructor is necessary for EF Core I believe?
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了这篇博客文章,它说可以做到以下几点:

// Class
private Guid _id;
public Guid Id => _id;

// Configuration
modelBuilder.Entity<Foo>()
.Property(b => b.Id)
.UsePropertyAccessMode(PropertyAccessMode.FieldDuringConstruction);

Run Code Online (Sandbox Code Playgroud)

这可以工作。

我在这里看到的唯一改进是我需要明确声明一个私有支持字段,即使一个{ get; }意味着一个是隐式创建的。

我怎样才能让 EF Core 与 JUST a 一起工作 …

c# entity-framework entity-framework-core .net-core

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

覆盖 ASP.NET Core 3 中的授权策略

编辑:这已经解决了。请在下面查看我的编辑。对于不需要“完全忽略声明”覆盖的更“默认”解决方案,请参阅已接受的答案。在撰写本文时,下面的 My EDIT 包含的代码可帮助您支持另一种情况,您希望完全忽略该要求而不是覆盖它。

我看过很多关于这个问题的帖子,但没有一个能真正解决我的问题。 可悲的是,一种有前途的方法对我不起作用。

我有一些政策。默认的要求存在声明。但另一项政策要求此声明不存在。如果默认的一个应用于控制器,我不能在方法上应用另一个。不是覆盖我以前的保单,而是将保单全部收集在一起,第一个保单失败,因为索赔不可用。

一个很好的例子:

启动:

services.AddAuthorization(options =>
{
    // 99% of the methods require you to have this claim, so we set this as default.
    options.DefaultPolicy = new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
        .RequireAuthenticatedUser()
        .RequireClaim("UserId")
        .Build();

    options.AddPolicy("UnregisteredUsers",
        new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
            .RequireAuthenticatedUser() // You DO need to be authorized, but that does not mean you already have an account!
            .RequireAssertion(x => x.User.FindUserIdClaim() == null) // If you do not have a user ID, you can not access endpoints that …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-core

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

如何在我上传文件的 Asp.Net core Web api 端点上进行集成测试?

我正在编写一个集成测试,用于测试将文件上传到我的端点之一并检查请求结果是否正确!

IFormFile在控制器中使用来接收请求,但收到 400 Bad 请求,因为显然我的文件为空。

如何允许集成测试将文件发送到我的端点?我找到了这篇文章,但只讨论了模拟IFormFile,而不是集成测试。


我的控制器:

[HttpPost]
public async Task<IActionResult> AddFile(IFormFile file)
{
   if (file== null)
   {
       return StatusCode(400, "A file must be supplied");
   }

   // ... code that does stuff with the file..

   return CreatedAtAction("downloadFile", new { id = MADE_UP_ID }, { MADE_UP_ID };
}
Run Code Online (Sandbox Code Playgroud)

我的集成测试:

public class IntegrationTest:
    IClassFixture<CustomWebApplicationFactory<Startup>>
{
    private readonly CustomWebApplicationFactory<Startup> _factory;

    public IntegrationTest(CustomWebApplicationFactory<Startup> factory)
    {
        _factory = factory;
    }

    [Fact]
    public async Task UploadFileTest()
    {
        // Arrange
        var …
Run Code Online (Sandbox Code Playgroud)

c# testing integration-testing asp.net-core

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