小编val*_*orl的帖子

.NET Core中的跨平台后台服务(想想windows service/unix守护进程)?

所以我有一个应用程序,它由API和Windows服务(由Topshelf包装)组成,它使用RabbitMQ持续监听事件并按需处理数据.

对于教育和娱乐,我试图将其重写为可在.NET Core和unix上运行的等效设置(例如,在AWS上的docker容器中)

如果我想保持跨平台的话,使用.NET Core实现等效于Windows服务(永远运行的后台进程)的最佳方法是什么?

unix daemon cross-platform .net-core

31
推荐指数
2
解决办法
7885
查看次数

VS 2017没有发现.NET Core上的测试

谁能帮助我让VS2017与.NET Core测试项目一起工作?

我尝试从VS 2017模板为.NET Core创建MSTest和xUnit单元测试项目.它们都不适用于测试资源管理器(未发现),但从dotnet test项目文件夹运行可以正常工作.

重现步骤:

  1. 在VS 2017中创建新项目
  2. 选择Unit Test Project (.NET Core)xUnit Test Project (.NET Core)模板
  3. 实施一些任意的单元测试
  4. 构建解决方案
  5. 转到文本资源管理器并尝试 Run All

此时,"输出"窗口应该告诉您已发现0测试

.csproj 文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
    <PackageReference Include="xunit" Version="2.2.0" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

如果我尝试从面向.NET Framework的模板(完整版,而不是.NET Core)创建MSTest单元测试项目,那么它可以工作.

有任何想法吗?

unit-testing test-explorer .net-core visual-studio-2017

19
推荐指数
3
解决办法
8800
查看次数

ASP.NET 5/Core/vNext即使允许几乎所有内容,CORS也无法正常工作

我有一个ASP.NET 5 Web API(好吧,现在是MVC)后端,我正在使用我的JS应用程序中的axios库.

我在MVC中的CORS配置如下:

public void ConfigureServices(IServiceCollection services)
{
      services.AddMvc();
      services.AddCors();
} 


public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{ 
      app.UseCors(builder => {
          builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
      });
}
Run Code Online (Sandbox Code Playgroud)

换句话说,我应该允许每一个请求.但是,虽然这个固定的预检请求仍然被拒绝(我可以看到它在服务器上执行,但是响应中没有标题,因此导致客户端错误).

有没有人有任何想法为什么这不起作用?

这些是MVC api返回的标头:

  • 对于OPTIONS预检(这一次通过): 选项回应
  • 对于实际的POST请求(这个不通过): POST响应

cors asp.net-core

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

在启用Kerberos之后,客户端有时会协商NTLM,直到重新启动客户端服务器为止。如何避免重启?

有关设置的一些上下文:

我们正在从NTLM切换到Kerberos(协商),以在各种.NET工作负载(例如IIS托管的Web API或简单的.NET命令行程序)之间进行服务到服务的身份验证。

对于从客户端到服务器的任何调用,中间都有一个API网关。我们在网关中有一些自定义逻辑,用于执行身份验证和强制执行Kerberos(使用NTLM票证拒绝协商标头)。正常的客户端-服务器流如下所示:

  1. 客户端(C)向服务器(S)发送请求
  2. 网关(G)拦截请求
  3. (G)使用WWW身份验证返回401挑战:协商
  4. (C)再次发送请求,并带有一个Authorization:Negotiate [ticket]标头
  5. (G)检查[ticket]并:
    5.a如果[ticket]为NTLM:“拒绝”请求(返回非成功状态码)
    5.b如果[ticket]为Kerberos:验证票证并(如果有效)通过请求到(S)

现在,为了不做大的改变,我们能够(在网关中)基于来自(C)的请求的原始目的地(应该是大致的主机名)配置发生Kerberos检查的请求和(S)的端口。

此设置可以正常工作,但偶尔会出现一个难以复制的问题:

  • 有时候,对于某些(S),当我们在(G)中启用Kerberos检入时,客户端(C)会继续发送NTLM票证(因此被拒绝)。
  • 尽管存在这样的事实,即(C)能够与Kerberos对话(G)的所有先决条件都得到满足-例如klist get HTTP/spn-of-G,即使冒充完全相同的用户,也可以从(C)执行a 并接收正确的Kerberos票证(C)通常以
  • 最重要的是,在与(C)相同的服务器上经常会有其他应用程序经过相同的流程
  • 重新启动运行(C)的Windows Server实例可以解决此问题,从而使(C)在重新启动后向(G)发送适当的Kerberos票证

我的问题是:是否有其他可能的方法可以解决这种情况,而无需重新启动服务器

我已经尝试过但没有成功的事情:

  • 重新启动在(C)上运行的应用程序。如果(C)是IIS应用程序,我尝试重新启动应用程序池,或者iisreset。但是我已经看到了这个问题,例如(C)是每15分钟运行一次完成的C#命令行程序。
  • 在运行(C)的服务器上刷新DNS ipconfig /flushdns
  • 在运行(C)的服务器上清除所有缓存的Kerberos票证(klist purge使用powershell脚本对所有登录会话执行)

.net windows kerberos negotiate ntlm-authentication

5
推荐指数
0
解决办法
81
查看次数

jenkins 中 webpack 的 config.js 中 Octopus 变量替换的策略

我正在开发一个 ES6 AngularJS 项目,我使用 webpack 将所有内容捆绑到dist/app.js.

我正在使用的 CI/CD 堆栈是 SCM - Jenkins - Octopus:

  1. 我的代码更新已推送到存储库

  2. Jenkins 克隆存储库,调用npm installgulp使用它gulp-webpack从一个入口点捆绑和缩小所有内容并将其放入dist/app.js

  3. 构建后,Jenkins 将应用程序打包到 nuget pkg 中,并将其推送到 Octopus Deploy,其中应用程序部署到 IIS

章鱼项目在多个环境中工作,我必须有一种方法来根据环境替换一些配置变量。为此,Octopus 提供了“替换文件中的变量”部署步骤。

当我不使用模块捆绑器和 ES6 时,我只会有一个配置文件来设置一些我随后使用的角度常数。我会有一个config.js文件和一个config.template.js文件。Octopus 将替换文件中的变量config.template.js,我只需将其设置为替换config.jsconfig.template.js部署后。

然而现在,我只是使用一个普通的config.js导出我需要使用的变量,然后将其导入到相关的文件中(例如包含角度控制器函数的文件)。

通过这种设置,我无法像以前那样进行替换,因为我的config.js意志只是包含在dist/app.js. 谁能帮我想出一个如何实现这一目标的策略?我想在构建之前进行config.js-交换,然后让 Octopus 替换整个包中的变量,但这似乎效率相当低。config.template.jsapp.js

javascript variable-substitution jenkins octopus-deploy webpack

4
推荐指数
1
解决办法
2414
查看次数