You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

172 lines
5.8 KiB

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Polly;
using Volo.Abp;
using Volo.Abp.Account;
using Volo.Abp.Autofac;
using Volo.Abp.AutoMapper;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Http.Client;
using Volo.Abp.Modularity;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Label.Application.Contracts;
using Win_in.Sfs.Shared.Host;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Eos;
using Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore;
using Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Eos;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.EosAgent;
[DependsOn(
typeof(AbpAutofacModule),
typeof(AbpAutoMapperModule),
typeof(AbpBackgroundJobsModule),
typeof(AbpBackgroundWorkersModule),
typeof(AbpHttpClientModule)
)]
[DependsOn(
typeof(StoreApplicationContractsModule),
typeof(InventoryApplicationContractsModule),
typeof(LabelApplicationContractsModule),
typeof(DataExchangeDomainModule),
typeof(DataExchangeEntityFrameworkCoreModule),
typeof(DataExchangeDomainFawtygEosModule),
typeof(DataExchangeEntityFrameworkCoreFawtygModule),
typeof(AbpAccountApplicationContractsModule)
)]
public class EosAgentModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<AbpHttpClientBuilderOptions>(options =>
{
//Polly 重试3次
options.ProxyClientBuildActions.Add((remoteServiceName, clientBuilder) =>
{
clientBuilder.AddTransientHttpErrorPolicy(policyBuilder =>
policyBuilder.WaitAndRetryAsync(
3,
i => TimeSpan.FromSeconds(Math.Pow(2, i))
)
);
});
//默认添加Authorization Header: Bearer Token
options.ProxyClientActions.Add((a, s, h) =>
{
var httpAuthorizationHandler = s.GetService<HttpAuthorizationHandler>();
if (httpAuthorizationHandler != null && httpAuthorizationHandler.IsLoggedIn())
{
h.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", httpAuthorizationHandler.GetCurrentBearer());
}
});
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
var env = context.Services.GetSingletonInstance<IHostEnvironment>();
context.SetConsoleTitleOfConsoleApp("EosAgent", env.EnvironmentName);
ConfigureDbContext();
ConfigureOptions(configuration);
context.Services.AddHostedService<EosAgentHostedService>();
ConfigureAutoMapper(context);
ConfigureHttpClientProxies(context);
ConfigureAuthentication(context, configuration);
}
private void ConfigureDbContext()
{
Configure<AbpDbContextOptions>(options =>
{
options.UseSqlServer();
options.UseSqlServer<EosDbContext>();
});
}
private void ConfigureOptions(IConfiguration configuration)
{
Configure<EosOptions>(configuration.GetSection("EosOptions"));
}
private void ConfigureAutoMapper(ServiceConfigurationContext context)
{
context.Services.AddAutoMapperObjectMapper<EosAgentModule>();
Configure<AbpAutoMapperOptions>(options => { options.AddMaps<EosAgentModule>(validate: false); });
}
private static void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
{
var isAlwaysAllowAuthorization = configuration.GetValue<bool>("AuthServer:AlwaysAllowAuthorization");
if (isAlwaysAllowAuthorization)
{
//绕过授权服务,用于测试
context.Services.AddAlwaysAllowAuthorization();
}
else
{
context.Services.AddAuthentication()
.AddJwtBearer(options =>
{
options.Authority = configuration["AuthServer:Authority"];
options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]);
options.Audience = "DataExchange";
options.BackchannelHttpHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback =
HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
});
}
}
private static void ConfigureHttpClientProxies(ServiceConfigurationContext context)
{
context.Services.AddHttpClientProxies(
typeof(BasedataApplicationContractsModule).Assembly,
"BaseData"
);
context.Services.AddHttpClientProxies(
typeof(AbpAccountApplicationContractsModule).Assembly,
"Auth"
);
context.Services.AddHttpClientProxies(
typeof(StoreApplicationContractsModule).Assembly,
"Store"
);
context.Services.AddHttpClientProxies(
typeof(LabelApplicationContractsModule).Assembly,
"Label"
);
}
public override void OnApplicationInitialization(
ApplicationInitializationContext context)
{
context.AddBackgroundWorkerAsync<EosIncomingBackgroundWorker>();
// context.AddBackgroundWorkerAsync<EosOutgoingBackgroundWorker>();
}
}