我正在尝试创建一个部署管道来将我的映像部署到 Kubernetes 集群。这个过程的第一步是基于 docker 文件创建一个镜像。我正在使用的 docker 文件是在我添加 docker 支持时从 Visual Studio 生成的,并在右键单击 docker 图像并选择创建它时成功创建了图像。当我配置 Azure Pipeline 时,创建 docker 映像会在尝试构建实际解决方案时失败。上一步获取了所有源文件,但随后在创建 docker 镜像时失败
[error]COPY failed: stat/var/lib/docker/tmp/docker-builder158012929/DockerTest/DockerTest.csproj:
no such file or directory
[error]/usr/bin/docker failed with return code: 1
Run Code Online (Sandbox Code Playgroud)
以下是Visual Studio生成的docker文件,azure管道阶段参考创建docker镜像。
FROM mcr.microsoft.com/dotnet/core/runtime:2.2-stretch-slim AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS
build
WORKDIR /src
COPY ["DockerTest/DockerTest.csproj", "DockerTest/"]
RUN dotnet restore "DockerTest/DockerTest.csproj"
COPY . .
WORKDIR "/src/DockerTest"
RUN dotnet build "DockerTest.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "DockerTest.csproj" -c Release -o …
Run Code Online (Sandbox Code Playgroud) 看起来很简单,但我不知道如何告诉 EF 核心不要创建具有自动递增标识列的实体的主键。我想自己插入我自己的主键值。我意识到我可以使用属性来做到这一点,但我想知道如何通过 fluent API 设置行为。我从 Property() 方法看到 UseSqlServerIdentityColumn() 方法,但我需要将其关闭(而不是打开)。我也试过下面的代码,但它不起作用。
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.Employees ON");
context.SaveChanges();
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.Employees OFF");
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 HangFire 来安排任何实现我调用的特定接口的类IScheduledService
。这些服务按预期运行,但 HangFire UI 在 HangFire 仪表板中始终为每个服务显示相同的名称PerformService()
。我知道这是设计使然,因为我将相同的函数名称传递给每个作业,但用户并不真正知道正在运行的特定作业。
我创建了接口,ServiceName
因为我认为可以将它传递给 HangFire 以覆盖可见的作业名称而不是被调用的函数的名称,但看不到修改作业名称的能力。有没有办法提供自定义作业名称,以便 HangFire UI 将根据ServiceName
属性值显示每个作业的标题?
public interface IScheduledService
{
string ServiceId { get; }
string ServiceName { get; }
void PerformService();
}
public class Service1 : IScheduledService
{
public string ServiceId { get => "e56643b1-f0cf-44b2-81ef-bf7a085de760"; }
public string ServiceName { get => this.GetType().Name; }
public void PerformService()
{
Console.WriteLine($"Hello world from {ServiceName}");
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个ForEach
活动,在每次迭代中,我需要设置一些迭代特定的变量。我可以通过使用为管道(管道范围)定义的变量来实现此目的,但这迫使我在Sequential
模式下运行循环,以便并行运行的多个迭代不会更新同一变量。我真正需要的是能够在每次迭代(迭代范围)内定义这些变量,以便我可以ForEach
以并行模式运行活动。
我考虑过创建一个 SQL 数据集,我可以在其中查找假值(SELECT 1 AS var1, 2 AS var2),只是为了获得一个可以设置和使用这些值的结构,但这看起来真的很蹩脚。我还考虑过使用带有 AppendVariable 选项的数组变量类型,但这引入了很多自定义解析。
如果我可以拥有一个 InMemory 数据集,而不必绑定到数据源,我可以将其用作 ForEach 迭代中的结构,那就太好了。有人对如何在ForEach
循环内设置迭代特定变量有任何其他想法吗?
创建虚拟机时,可以选择为计算机创建托管标识,以对其他 Azure 资源(例如存储帐户)进行身份验证,如以下 Microsoft 文档中所述。
https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/
我有一个运行 IIS FTP 服务的虚拟机。我想将 Windows 服务作为托管标识运行,以便它可以访问用于 ftp 根目录的存储帐户,但我找不到在“此帐户”区域下成功指定此托管标识原则的方法服务的登录选项卡。
假设系统分配的托管标识已打开,是否可以使用 VM 的托管标识在 Azure VM 中运行 Windows 服务?如果是这样,当以特定用户身份运行服务时,您是否像常规托管服务帐户一样格式化它,在末尾附加 $ 且不带密码?
我有一个使用工作或学校帐户(Azure AD 身份验证)的 ASP.NET Core 2.2 Web 应用程序。当我退出时,应用程序结束于
/AzureAD/帐户/注销
我希望它使用应用程序注册中指定的注销 URL 重定向回主页。请参阅下面的屏幕截图。在此处指定注销 URL 时,Azure AD 实际上会调用该页面(以清除会话数据),但最终会在 /AzureAD/Account/SignedOut 位置结束。我没有看到其他任何地方可以指定等效的注销 URL。这是使用 Azure AD 身份验证时 Visual Studio 生成的注销按钮代码。
<a asp-area="AzureAD" asp-controller="Account" asp-action="SignOut">Sign out</a>
Run Code Online (Sandbox Code Playgroud)
我还尝试将重定向直接添加到操作中。
<a asp-area="AzureAD" asp-controller="Account" asp-route-post_logout_redirect_uri="https://localhost:44381" asp-action="SignOut">Sign out</a>
Run Code Online (Sandbox Code Playgroud)
我使用的是HostedService
内部的ASP.NET core web api
,将在部署在IIS的前提实例(.NET Core 2.2)
我需要确保空闲超时设置为零,以确保后台服务将持续运行,我相信这可以通过设置空闲来完成应用程序池上的超时为零。但是,这将需要IIS
管理员在设置时执行此操作,所以我想知道是否有办法在 kestrel 首次在CreateWebHostBuilder()
程序类的方法中配置时配置其空闲超时为零.
这可能吗?
我尝试使用具有以下三种项目类型的解决方案来遵循 DDD 的干净架构:
我有一个工厂类MapperFactory
,它实现一个接口,该接口根据传入工厂的参数IMapperFactory
返回一个。的实现驻留在核心层。IMapperService
MapType
IMapperService
我正在努力理解工厂实现类应该驻留在哪里。我的所有存储库都是在基础设施项目中实现的,但域服务是根据干净的架构指南在核心项目中实现的(至少我是如何阅读它们的)
我觉得工厂的实现应该位于核心项目中,因为这是它需要创建的所有实现所在的位置,但不确定。如果它应该在核心项目中,那么它会是什么类型的对象,因为它不是实体、服务或接口?
我试图通过创建下面的个人构建器对象来理解流畅的构建器模式。我已经编写了代码,因为我想使用它,但是在实现它时遇到了问题。我的问题如下:
HavingJob()
,这应该创建一个新作业,然后可以仅使用适用于作业的方法进行配置,并最终添加到Jobs
人员集合中。感觉应该返回它,以便可以在其上调用其他流畅的作业方法。不确定如何实现这一点,同时允许在该级别及更高级别进行链接。IJobBuilder
方法时,我无法访问他们在HavingJob()
方法中创建的特定作业,因为我需要返回IJobBuilder
以将 fluent 方法限制为仅与作业相关的方法。HavingJob()
使那些特定的作业方法可以在特定作业上运行同时仍允许链接的技巧是什么?IJobBuilder
,我就不能再打电话Build()
或HavingJob()
添加额外的工作。答案是否IJobBuilder
是继承自的单独实现PersonBuilder
? public class Person
{
public string Name { get; set; }
public List<Job> Jobs { get; set; }
public List<Phone> Phones { get; set; }
}
public class Phone
{
public string Number { get; set; }
public string Usage { get; set; }
}
public class Job
{
public …
Run Code Online (Sandbox Code Playgroud) 我在 ADF 的 Until 活动中进行了两次查找。第一个查找 ( BookList
) 是类似于下面列出的 JSON 的书籍列表。
[
{
"BookID": 1,
"BookName": "Book A"
},
{
"BookID": 2,
"BookName": "Book B"
}
]
Run Code Online (Sandbox Code Playgroud)
ExcludedBooks
第二个查找是我想要从下面列出的第一个列表 ( ) 中排除的书籍列表。
[
{
"BookID": 2,
"BookName": "Book B"
}
]
Run Code Online (Sandbox Code Playgroud)
在这两次查找之后,我有一个 Filter 活动,其项目是查找中的值BookList
。我希望过滤条件基于未在值中列出的 BookID 值ExcludedBooks
,但我不确定如何根据 ADF 中的集合函数编写此条件。我所拥有的在下面列出,但不起作用。
@not(contains(activity('ExcludedBooks').output.value, item().BookID))
Run Code Online (Sandbox Code Playgroud)
我意识到解决此问题的一种方法是循环遍历 ExcludedBooks 的每条记录,并使用 SetVariable 活动构建 BookID 数组,该数组可以与集合函数 Contains() 一起使用,但由于某种原因,ADF 不允许嵌套活动组( ForEach 内的 Until)。
我也无法在 Until 活动之外设置排除的书籍列表,因为它会随着 Until 活动的每次迭代而变化。我还意识到嵌套组活动限制的解决方法是创建一个完全不同的管道,但这并不理想,并且在尝试返回结果时会产生不必要的复杂性。
有人对如何根据另一个查找的结果过滤查找结果有任何建议吗?
c# ×3
.net-core ×2
asp.net-core ×2
azure-devops ×1
docker ×1
dockerfile ×1
ef-core-2.1 ×1
fluent ×1
hangfire ×1
kestrel ×1