我正在为我的 WEBAPI 项目使用 ASP.NET CORE 2.0.5 运行时。在我的实现中,当请求传入时,一个新任务就会开始执行一些繁重的工作,并最终向其他地方的 webapi 发出请求。与此同时,我正在向呼叫者返回成功响应。
问题是,由于繁重的工作需要更长的时间来处理,我无法利用我在 Startup 类中设置的所有 DI 服务,因为原始请求已经返回并且所有 DI 服务都已处理。
有没有办法将我的 IServiceCollection 传递给新任务,或者有更好的方法吗?
更新:
事实证明,并不是所有 DI 服务都被处理掉了。只有这一个:
services.AddTransient<HttpMessageHandler, HttpClientHandler>();
Run Code Online (Sandbox Code Playgroud)
该行用于启用单元测试。没有它,我的 webapi 运行良好,但我的单元测试失败了......
我正在使用 cloudformation 定义一个 api 网关,该网关定义了 4 个方法:GET、POST、PUT 和 DELETE。
我想使用这 4 个方法来触发我的 lambda。当部署此模板时。lambda 仅显示 API 网关的 DELETE 方法。
如何在 cloudformation 中定义我的 lambda,以便它将采用所有 4 种方法?
Resources:
lambdaExecutionRole:
Type: "AWS::IAM::Role"
Properties:
Path: /
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
ManagedPolicyArns:
- !Sub "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
lambdaFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: !Ref AWS::StackName
VpcConfig:
SubnetIds:
- {"Fn::ImportValue": !Sub "${networkStackName}-${AWS::Region}-privateSubnetAZ1"}
- {"Fn::ImportValue": !Sub "${networkStackName}-${AWS::Region}-privateSubnetAZ2"}
SecurityGroupIds:
- {"Fn::ImportValue": !Sub "${securityStackName}-${AWS::Region}-sgDNSRestrictedAccess"}
Runtime: dotnetcore2.1
Handler: MY::LAMBDA.HANDLER::NAME
MemorySize: 128
Role: !GetAtt lambdaExecutionRole.Arn …Run Code Online (Sandbox Code Playgroud) 我正在使用.NET Core WEBAPI和Dockerfile以下
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "DummyService.dll"]
Run Code Online (Sandbox Code Playgroud)
在我的cloudformation模板中,ECS部分如下所示
dummyWebApiEcsTaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
Family: !Ref AWS::StackName
TaskRoleArn: !GetAtt dummyWebApiIamRole.Arn
ContainerDefinitions:
- Name: !Ref AWS::StackName
Image: MY IMAGE URL
DnsSearchDomains:
- !Join [".", [{"Fn::ImportValue": !Sub …Run Code Online (Sandbox Code Playgroud)