这篇文章将为大家详细讲解有关目录服务如何解析微软微服务架构,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
源码分析
我们先看下它的目录结构,很标准的webapi目录:
首先看下程序,跟IdentityService类似,多了一个UseWebRoot(“图片”),把照片这个目录设置成了webroot发起,其他都一样。
在启动的构造方法中,我们也看到了使用了秘密的管理工具,但是多了一个参数,在这里我们看到的是组装类型,其实秘密只需要其中的userSecretsId而已。
在ConfigureServices中,我们看到如下代码:
服务。AddMvc(选项=比; { options.Filters.Add (typeof (HttpGlobalExceptionFilter)); }).AddControllersAsServices ();
添加了一个过滤器,这个HTtpGlobalExceptionFilter可以在项目中找的到,大概的意思就是遇到抛出CatalogDomainException类型的错误时,返回特定的错误码。
AddControllersAsServices这个扩展方法是把项目中的控制器都注册到服务中,我们看下源码:
公共静态IMvcCoreBuilder AddControllersAsServices(这IMvcCoreBuilder builder) { var=new ControllerFeature特性(); builder.PartManager.PopulateFeature(特性);在feature.Controllers foreach (var控制器。选择(c=比;c.AsType ())) { builder.Services。TryAddTransient(控制器,控制器); } builder.Services.Replace (ServiceDescriptor.Transient());返回的建设者; }
中间那段foreach就是,这样我们在项目中通过依赖注入方式都能方便的访问到各个控制器了。
services.AddDbContext(选项=比; { (“ConnectionString") options.UseSqlServer(配置, sqlServerOptionsAction: sqlOptions=比; { .Assembly.GetName sqlOptions.MigrationsAssembly (typeof(启动).GetTypeInfo () () . name);//配置连接弹性:sqlOptions。EnableRetryOnFailure (maxRetryCount: 5, maxRetryDelay: TimeSpan.FromSeconds (30), errorNumbersToAdd: null); });//更改默认行为客户评价发生时抛出。//默认在EF核心客户评价是performed.options时记录一个警告。ConfigureWarnings(警告=比;warnings.Throw (RelationalEventId.QueryClientEvaluationWarning));//检查客户机与服务器的评估:});
对DBContext的配置的时候,这里使用了连接弹性(弹回连接)的方式,其中可以看到使用迁移的时候,它使用了MigrationsAssembly (AssemblyName),这种方式跟我之前讲的FluentNhibernate有点类似,EnableRetryOnFailure设置了这个行动的失败尝试机制,如果迁移的时候遇到失败,就会自动重试,这种方式避免了应用程序与数据库分离造成的连接偶尔失败造成的影响。为什么会有这个机制呢?因为当我们的数据库在云端的时候,比如SQL Azure,不可避免的会出现网络连接问题,即使我们把应用程序和数据库放在一个数据中心中,我相信偶尔也会有这个问题,我们现在可以通过配置,使其如果遇到失败就会重新操作,一定程度避免了网络偶尔造成的问题。你也可以设置一些策略,使其能够在运行命令的时候能够进行重试EF默认情况下只是记录客户评价中的警告,我们可以通过ConfigureWarnings使其抛出这个警告,你也可以配置成忽略。
接下来我们看到如下代码:
services.Configure(配置);
我们可以在eShop的各个项目中都能找到类似的语句,它会把一些项目相关的设置注册到服务中,使其成为环境变量,我们可通过setting.json进行配置。除了通过设置。json进行配置,我们还能通过码头工人运行- e进行灵活化配置。
在这里我们的CatalogSetting含有一个ExternalCatalogBaseUrl属性,我们在码头工人跑的时候可以输入如下命令:
docke运行- e“ExternalCatalogBaseUrl=http://localhost: 5011/?...
这样就能灵活的通过码头工人命令进行配置了,非常方便,我们也可以通过- e对我们设置。json中的变量进行赋值,比如ConnectionString,你可以通过点击了解更多相关内容。
//添加框架services.services.AddSwaggerGen (); 服务。ConfigureSwaggerGen(选项=比; { options.DescribeAllEnumsAsStrings (); 选项。SingleApiVersion(新Swashbuckle.Swagger.Model.Info () { Title=癳ShopOnContainers——目录HTTP API" Version=皏1", 描述=澳柯糓icroservice HTTP API。这是一个数据驱动/CRUD microservice sample", TermsOfService=癝ervice" }); }); 服务。AddCors(选项=比; { options.AddPolicy (“CorsPolicy" builder=比;builder.AllowAnyOrigin () .AllowAnyMethod () .AllowAnyHeader () .AllowCredentials ()); });目录服务如何解析微软微服务架构