ASP.NET Core分布式项目实战

默认教学计划
888人加入学习
(28人评价)
价格 ¥398.00
教学计划

 

oAuth2四种模式

详情http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

[展开全文]

https://hlef81mt.mirror.aliyuncs.com

[展开全文]

本节的demo里的Gateway项目在视频里只展示了Ocelot.json和Startup.cs文件,缺乏注册Consul服务的代码,可能在Program.cs中,但是没有看到相关展示。

我看了下Ocelot官方文档,可以通过Nuget添加Ocelot.Provider.Consul程序包(这个程序包包含Consul和Ocelot,添加它之后就不用再添加Ocelot了),然后在Startup.cs文件中注入

public void ConfigureServices(IServiceCollection services)
{
    services.AddOcelot()
        .AddConsul();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    { 

        app.UseDeveloperExceptionPage();
    }
    app.UseOcelot().Wait();
}

另外,还有个负载均衡节点的配置问题,在本节课的另一篇笔记里已经提了出来,我就不再赘述了,按视频中老版本的配置不会报错,只是配置应该没起作用,会一直访问一个节点,直到这个节点挂了才会切换

[展开全文]

docker安装不上。。。

[展开全文]

Startup.cs设置认证时,需要添加

IdentityServer4.AccessTokenValidation程序包,才能使用AddIdentityServerAuthentication方法

[展开全文]

http://localhost:5000/.well-known/openid-configuration

[展开全文]

拼合注册IP地址问题:

//var address = dnsQuery.ResolveService("seviece.consul",serviceDiscoveryOptions.Value.UserServiceName);
            //var addressList = address.First().AddressList;

            //var host = addressList.Any() ? addressList.First().ToString() : address.First().HostName;
            //var port = address.First().Port;

            //直接读取Json配置用法
            var host = IPAddress.Parse(serviceDiscoveryOptions.Value.Consul.DnsEndpoint.Address);
            var port = serviceDiscoveryOptions.Value.Consul.DnsEndpoint.Port;

 

可以获取IP地址,但服务访问无法成功,留存。

[展开全文]

什么是oAuth

oAuth四种模式

Identity Server4来分别实现这4种模式

做一个可以独立部署、随时

[展开全文]

引用:

http://michaco.net/blog/ServiceDiscoveryAndHealthChecksInAspNetCoreWithConsul

[展开全文]

折腾了三天,终于把两个容器启动起来了。

解决方案:

[docker-compose.yml]

version: '3.4'

services:
  db:
    image: mysql/mysql-server
    container_name: db
    networks:
      innernet:
        aliases:
          - mysqldb
          - db
    restart: always
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: Pwd@123456
      MYSQL_USER: simon
      MYSQL_PASSWORD: Pwd@123456
    volumes:
      - c:\applications\docker\mysql\mysql-init:/docker-entrypoint-initdb.d
      - c:\applications\docker\mysql\data:/var/lib/mysql
      - c:\applications\docker\mysql\config:/usr/local/mysqlconf
    command: >
      bash -c '
      cp /usr/local/mysqlconf/*.cnf /etc/
      && chmod 644 /etc/*.cnf
      && /entrypoint.sh mysqld
      '
  user.api:
    image: simon/userapicore
    build:
      context: .
      dockerfile: User.API/Dockerfile
    networks:
      - innernet
    container_name: userapicore
    ports:
      - '8002:80'
    depends_on:
      - db
networks:
  innernet:
    driver: bridge

解决问题点包括:

1 Mysql的root密码需要符合强密码要求,否则登录可能发生root密码正确无法登录/root空密码可登陆。

2 Mysql外置配置文件,win系统映射后默认权限为777。导致mysql提示“该配置文件因全局可写,忽略该文件”,导致外置配置不生效问题。

【推荐】目前解决方案为增加command指令,复制配置文件到etc目录,并改权限为644,问题解决:

command: >
      bash -c '
      cp /usr/local/mysqlconf/*.cnf /etc/
      && chmod 644 /etc/*.cnf
      && /entrypoint.sh mysqld

【未测试】或将项目文件存放于c:/users目录下,本项不符合习惯未测试。

3 关于windows下的路径设置,参考vs2017自动生成的yml文件,写法如下:

volumes:
      - c:\applications\docker\mysql\mysql-init:/docker-entrypoint-initdb.d

注意盘符的冒号和斜杠方向。

【注意】win环境下yaml路径书写与cmd的dodker run命令书写方式不同!

4 各容器采用network方式加入网络,需要通过容器名访问,需要在network下指定aliases别名。

【释疑】network下的aliases不是该网络的别名,是加入该网络的容器别名(主机名)。

 

 

[展开全文]

Docker编译问题:

错误代码:

CSC : error CS5001: Program does not contain a static 'Main' method suitable for an entry point [/src/code/User.API.csproj]

Build FAILED.

CSC : error CS5001: Program does not contain a static 'Main' method suitable for an entry point [/src/code/User.API.csproj]
    0 Warning(s)
    1 Error(s)

dockerfile文件:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY *.csproj code/
RUN dotnet restore code/*.csproj
COPY . .
WORKDIR /src/code
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "User.API.dll"]

 

解决方案:

项目属性-->输出类型:

从控制台应用程序改为类库。

问题解决。

 

[展开全文]

Docker — 从入门到实践

https://yeasy.gitbooks.io/docker_practice/content/compose/commands.html

 

YAML 语言教程 -- 阮一峰的网络日志

http://www.ruanyifeng.com/blog/2016/07/yaml.html

[展开全文]

.net Core 2.1:

现版本无法支持MySQL8.1,导致无法执行migration的bug。

错误报告:

Method not found: 'Void Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommandBuilderFactory..ctor(Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger`1<Command>, Microsoft.EntityFrameworkCore.Storage.IRelationalTypeMapper)'.

解决方案:

https://blog.csdn.net/ujm097/article/details/80789949

注意:

1 删除Mysql.Data.EntityFrameworkCore包

2 Startup中,连接字符串引用UseMySQL大写按提示改为UseMySql小写。

目前完美解决。

 

[展开全文]

docker pull microsoft/dotnet的时候,使用阿里云镜像,可能导致2.1-sdk无法获取,需要使用docker原始路径。

dotnet core 2.1:

[dockerfile]内容:

FROM microsoft/dotnet:2.1-runtime AS base
WORKDIR /app

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY console.csproj /src
RUN dotnet restore console.csproj
COPY . .
WORKDIR /src
RUN dotnet build console.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish console.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "console.dll"]

[展开全文]
docker run -d -p 3306:3306 --name mysql01 
-v=/docker/mysql/config/my.cnf:/etc/my.cnf 
-v=/docker/mysql/data:/var/lib/mysql mysql/mysql-server
[展开全文]
docker run -d -p 3306:3306 
-e MYSQL_USER="lyle" 
-e MYSQL_PASSWORD="pwd123456" 
-e MYSQL_ROOT_PASSWORD="pwd123456" 
--name mysql01 mysql/mysql-server 
--character-set-server=utf8 
--collation-server=utf8_general_ci

docker exec -it mysql01 bash
mysql -uroot -p

select host,user,plugin,authentication_string from mysql.user;

CREATE USER 'lyle'@'localhost' IDENTIFIED BY 'pwd123456';
GRANT ALL PRIVILEGES ON *.* TO 'lyle'@'localhost' WITH GRANT OPTION;

CREATE USER 'root'@'%' IDENTIFIED BY 'pwd123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd123456';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pwd123456';

ALTER USER 'lyle'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd123456';
ALTER USER 'lyle'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pwd123456';

 

[展开全文]

授课教师

程序员

课程特色

视频(139)
讨论(1)
下载资料(1)
图文(2)