[asp.net核心2.0和linux的docker]
我是docker的新手,并试图找出如何在我有2个项目的解决方案的情况下使用docker.我见过的所有教程都展示了单个项目.
所以,如果有人能够逐步展示解决方案,我会非常感激.
我有一个解决方案结构,如:
Solution.sln
|______WebAPIProject.csproj
|______ClassLibraryProject.csproj
Run Code Online (Sandbox Code Playgroud)
在Visual Studio中,我已经为解决方案添加了docker支持并获得了这些文件:
在WebAPIProject下,它创建了这个Docker文件:
FROM microsoft/aspnetcore:2.0
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "WebAPIProject.dll"]
Run Code Online (Sandbox Code Playgroud)
然后,在单独的docker-compose'项目'下,我得到了:
泊坞窗,compose.ci.build.yml
version: '3'
services:
ci-build:
image: microsoft/aspnetcore-build:1.0-2.0
volumes:
- .:/src
working_dir: /src
command: /bin/bash -c "dotnet restore ./Solution.sln && dotnet publish ./Solution.sln -c Release -o ./obj/Docker/publish"
Run Code Online (Sandbox Code Playgroud)
和docker.compose.yml文件
version: '3'
services:
WebAPIProject:
image: WebAPIProject
build:
context: ./WebAPIProject
dockerfile: Dockerfile
Run Code Online (Sandbox Code Playgroud)
我确信它的路径是微不足道的,但我只是迷失了所有这一切,所以如果有人能够对它有所了解?
我们现在显然可以将我们的asp.net核心应用程序部署到docker容器中.我浏览了关于"怎么做"的文档,但我找不到关于"为什么要这样做"的正确解释?
任何人都可以解释为什么会选择将asp.net核心应用程序部署到docker容器而不是azure app服务?
我想使用JWT保护ASP.NET Core Web API.另外,我想有一个选项,直接在控制器动作属性中使用来自令牌有效负载的角色.
现在,虽然我确实找到了如何将其与策略一起使用:
Authorize(Policy="CheckIfUserIsOfRoleX")
ControllerAction()...
Run Code Online (Sandbox Code Playgroud)
我想更好地选择使用通常的东西:
Authorize(Role="RoleX")
Run Code Online (Sandbox Code Playgroud)
其中Role将从JWT有效负载自动映射.
{
name: "somename",
roles: ["RoleX", "RoleY", "RoleZ"]
}
Run Code Online (Sandbox Code Playgroud)
那么,在ASP.NET Core中实现这一目标的最简单方法是什么?有没有办法通过一些设置/映射自动工作(如果是这样,在哪里设置它?)或者我应该在验证令牌后,拦截生成ClaimsIdentity并手动添加角色声明(如果是,在何处/如何操作)那?)?
我对自定义UserManager和UserStore有点困惑.开箱即用的解决方案带有EF实现,我不想使用EF,而是我自己的使用MSSQL的DAL.我想要基于声明的安全性,其中一个用户声明将是角色.
我感到困惑的是我应该做的整个过程.从我到目前为止看来,我需要自己创造
CustomApplicationUser : IUser
CustomUserManager : UserManager<CustomApplicationUser>
CustomUserStore : IUserStore, IUserClaimStore
Run Code Online (Sandbox Code Playgroud)
问题:
这对我来说似乎有点混乱,我似乎无法找到一些关于它的清晰文档,所以如果有人能够对它有所了解,我将非常感激!
如何发送带有响应钩的按钮单击上的HTTP请求?或者,就此而言,如何在单击按钮时产生任何副作用?
到目前为止,我看到的是“间接”的东西,例如:
export default = () => {
const [sendRequest, setSendRequest] = useState(false);
useEffect(() => {
if(sendRequest){
//send the request
setSendRequest(false);
}
},
[sendRequest]);
return (
<input type="button" disabled={sendRequest} onClick={() => setSendRequest(true)}
);
}
Run Code Online (Sandbox Code Playgroud)
那是正确的方式还是还有其他模式?
Typescript(或者我们应该说ES)不允许对null/undefined对象进行解构.它抛出TypeError.
所以,让我们说我们有类似的东西
let {a,b,c} = D;
Run Code Online (Sandbox Code Playgroud)
哪里D可以null.
如果我们需要使用空值检查进行条件解构赋值,那么我们会为那些旨在减少它的东西创建样板代码.
在这样的情况下使用它的最优雅的方法是什么,或者我们应该仅为保证的非空对象使用解构?
[免责声明:我来自前端、react/Angular 世界,我使用 redux/ngrx 进行状态管理。]
\n\nWPF 应用程序中是否有一些管理应用程序状态的标准方法?
\n\n我\xe2\x80\x99见过一些内置命令的使用。另一方面,我\xe2\x80\x99见过Redux.NET库。
\n\n对于其中一个项目,我需要对应用程序状态管理做出决定,并且 i\xe2\x80\x99d 喜欢采用某种标准方法。
\n\n那么,是否有一个单一的标准方法或者可能是最常用的 3 种方法的列表?
\n免责声明:我试图从人们的第一手经验中感受真实世界的数字.此时不需要实现细节/代码.
我们有web api,它将使用队列/消息代理将消息丢弃,然后,windows服务将读取队列以提供不同类型的http通知(简单地说:向许多网址/主机发送许多http请求).在窥视时间,这些数字可能是每秒数千.
考虑到ServicePoint最大连接限制加上ThreadPool线程,我试图找到正确的调整发送部分的措施.所以,潜在的问题是:
笔记:
目前,我并不关心队列/消息代理限制.为了讨论起见,我们可以假设这部分是无限的.
这些请求非常轻量级,其中大部分都有几kbs的数据,因此预计响应时间非常短
.net architecture windows-services httpwebrequest dotnet-httpclient
从理论上讲,如果我们在聚合根级别实现乐观并发(更改 AR 中的实体会更改 AR 上的版本),并且假设我们使用时间戳作为版本属性(只是为了简单起见) - 时间线应该是 AR 上的属性还是应该是一侧和另一侧的读取模型的一部分(例如更新)是应用程序服务的单独参数,例如:
[伪]
public class AppService{
.
.
.
public void UpdateSomething(UpdateModelDTO model, int timestamp)
{
repository.GetModel(model.Identifier);
model.UpdateSomething(model.something);
repository.ConcurrencySafeModelUpdate(model, timestamp);
}
}
Run Code Online (Sandbox Code Playgroud)
我看到两者的优点/缺点,但想知道哪个是按书本解决方案?
[更新]
为了回答@guillaume31的问题,我预计通常的情况是:
我不知道它是否重要,但我想将创建/更新版本标识符本身的责任留给我的数据库系统。
我有Product.
Product有一些GeneralDetails,让我们说:sku, name, description。同时,会计师可以Product在某些ProductCalculations部分放置不同的值,例如purchasePrice, stockLevelExpenses, wholeSalesPrice, retailPrice.
所以,到目前为止,Product看起来像:
class Product{
GeneralDetails Details;
ProductCalculations Calculations;
ChangeDetails(GeneralDetails details){}
Recalculate(ProductCalculations calculations{}
}
Run Code Online (Sandbox Code Playgroud)
此设置将生成Product聚合根。但是现在,我想以一种方式拆分它,即产品经理可以输入/更新产品详细信息,但随后该会计师可以介入并独立地更改给定产品的计算,而不会出现并发问题。这将建议将其拆分为 2 个单独的聚合根。
但是,删除ProductDetails聚合也必须意味着删除ProductCalculations,它应该以事务性的方式发生。
假设它们是 2 个聚合根,这意味着它们有 2 个具有相应Delete方法的独立存储库,如何将其实现为原子事务?
我唯一能想到的是在ProductDetails被删除时引发事件,有一个处理程序(DomainService),它使用一些特殊的存储库来处理多个聚合根上的事务。
这种方法有什么问题和/或有更好的方法来处理它吗?
附注。ProductDetails删除时我不能允许最终一致性。
PS2。根据来自@乔恩的意见,Details以及Calculations创建和删除应在当的方式同步Details在创建/删除,Calculations也应创建/删除。另一方面,它们的更新应该是完全独立的。
asp.net-core ×3
docker ×2
.net ×1
architecture ×1
asp.net-mvc ×1
c# ×1
ecmascript-6 ×1
react-hooks ×1
reactjs ×1
typescript ×1
wpf ×1