解决.net core 使用 Microsoft.Data.SqlClient 连接低版本 sql server 问题

在使用 `Microsoft.Data.SqlClient` 连接sql server 2012 的时候,报了一个错误: ``` A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: SSL Provider, error: 31 - Encryption(ssl/tls) handshake failed) ``` .net core 程序是跑在 docker 上, 单独部署到本地IIS上的时候却没有这个错误,因此猜测可能是 docker 基础镜像环境问题。 解决方法,在 dockerfile 上加上2行,修改环境内 linux tls ssl 支持的最低版本。 Read more

spark submit 命令参数 --package 附加包

在编写 spark.net 应用的时候,需要连接 sql server 数据库, 使用 spark submit 运行的时候,发现提示 `java.sql.SQLException: No suitable driver`, 想想应该是没有对应的驱动,也就是指定的 `jdbc:sqlserver://` 无法识别。 因为 spark.net 底层是直接调用java的,所以,这里需要添加 java 的 sql server 驱动库。 Read more

abp vnext 使用备注之微服务

从 https://docs.abp.io/en/abp/latest/API/Dynamic-CSharp-API-Clients 这里知道了如何配置将一个app server 配置为动态Http客户端代理。 简要归纳下: 假设:有服务A,服务B,服务C,和一个对外的Web ,其中 服务C依赖 服务B 。 1, 服务A,B,C,在 HttpApi.Client 层需通过AddHttpClientProxies 将各个服务的定义(Application.Contracts) 在这里注册。 2, 服务C 的应用层添加 B的 Application.Contracts 引用(或者package), 目的是可以在B里面使用B定义的app service . 3, 服务C 的Host层,需要添加 B 的Http代理层。目的是注册B的服务。否则会抛出 B的服务实现未注册的错误。 4, 对外的Web,需要添加 服务A,B,C 的Http代理层,原因同理。 Read more

abp vnext 使用之日期时间

abp 自带了一个 IClock接口,用来控制获取当前时间。 因为 DateTime.Now 本身默认情况下 是缺省timezone 的,所以,为了避免在系统中,不同的地方,获取的datetime 可能存在不一样的问题,统一抽象出一个 IClock 接口。 在 AbpClockOptions 中可以配置全局默认的DateTimeKind,如果希望使用 系统默认使用 UTC 的 Now, 可以配置 Kind 为 UTC,此配置默认是 Unspecified ,即未指定。 Read more

同一个函数内多个异步锁

通常,使用异步锁都是直接使用这个库 AsyncEx 中的 AsyncLock 。 先看看官方栗子: private readonly AsyncLock _mutex = new AsyncLock(); public async Task UseLockAsync() { // AsyncLock can be locked asynchronously using (await _mutex.LockAsync()) { // It's safe to await while the lock is held await Task.Delay(TimeSpan.FromSeconds(10)); } } 这个栗子的效果是如果有很多用户同时访问进来,里面的内容会 one by one 执行,不会出现同时执行的情况。 Read more