摘要: WebApplicationFactory 是 ASP.NET Core 2.1 新特性 MVC functional test infrastructure 中带来的新东东,它封装了 TestServer 的使用,让 ASP.NET Core 的集成测试更简便、配置更灵活。阅读全文
posted @ 2018-06-18 16:47 dudu 阅读(44) 评论(0) 编辑
摘要: ASP.NET Core 中的 Request.Body 虽然是一个 Stream ,但它是一个与众不同的 Stream —— 不允许 Request.Body.Position=0 ,这就意味着只能读取一次,要想多次读取,需要借助 MemoryStream ,详见博问 asp.net core中2次读取Request.Body的问题阅读全文
posted @ 2018-06-16 16:51 dudu 阅读(90) 评论(0) 编辑
摘要: ResponseCaching 提供了 VaryByHeader 与 VaryByQueryKeys 这两种种方式配置缓存 Key ,我们在使用 VaryByHeader 时发现一个问题 —— 使用 VaryByHeader 时如果不做限制,会面临缓存被撑爆的风险。比如上面根据 Accept 请求头进行缓存,由于客户端可以任意修改请求头,如果有爬虫发出大量的请求阅读全文
posted @ 2018-06-14 12:58 dudu 阅读(33) 评论(0) 编辑
摘要: 在 .NET Core 2.1 中,System.Net.Sockets 的性能有了很大的提升,最好的证明是 Kestrel 与 HttpClient 都改为使用 System.Net.Sockets ,stackoverflow 上也有人提到了,详见 libuv vs sockets in asp.net core 2.1 。这两天阅读了 corefx 中 HttpClient 的 SocketsHttpHandler 部分实现代码,学习了一下它是如何在异步方法中连接 Socket 的阅读全文
posted @ 2018-06-10 14:31 dudu 阅读(139) 评论(3) 编辑
摘要: 在 HttpClientFactory 出生之前,由于 HttpClient 臭名昭著的“dispose之后4分钟tcp连接才会被关闭”问题(详情),只能使用单例或静态的 HttpClient ,但这会带来一个副作用,如果 dns 解析更新了,HttpClient 不会自动更新IP地址。随着 .NET Core 2.1 的发布,HttpClientFactory 横空出世,有效解决了 HttpClient 的生命周期与 TCP 连接管理的问题。阅读全文
posted @ 2018-06-03 20:48 dudu 阅读(267) 评论(2) 编辑
摘要: 之前我们为了实现在各个项目中共用自定义错误页面,通过“中间件+字符串拼接页面html”的方式实现了一个公用类库,但实现复杂,页面维护很不方便。Razor Class Library 正好可以解决我们的这个心头之痛,趁着今天 .NET Core 2.1 正式版发布 之热,体验一下这个新特性。阅读全文
posted @ 2018-05-31 16:26 dudu 阅读(124) 评论(2) 编辑
摘要: 日志是程序员的雷达,不仅在生产环境中需要,在集成测试环境中也需要,当持续集成失败后日志可以帮助定位问题。与生产环境不同,在集成测试环境中使用控制台输出日志更方便,这样可以通过持续集成 runner 执行 job 时的输出看到日志阅读全文
posted @ 2018-05-29 12:10 dudu 阅读(66) 评论(0) 编辑
摘要: 今天在一个 asp.net core 项目中遇到了 nuget 包版本冲突的问题。版本冲突就是由于两个地方引用的 Microsoft.AspNet.WebApi.Client 版本不一致。但 .net core 中根本没有 assembly binding redirect 机制,那怎么办?非常好办,只要认真看了错误提示信息阅读全文
posted @ 2018-05-27 22:46 dudu 阅读(256) 评论(1) 编辑
摘要: 之前在 ASP.NET Core 2.0 中可以正常运行的代码,升级到 ASP.NET Core 2.1 之后出现错误:"System.InvalidOperationException: No service for type 'Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor' has been registered",查看 ViewResultExecutor 的定义发现 ViewResultExecutor 实现了 IActionResultExecutor阅读全文
posted @ 2018-05-19 16:52 dudu 阅读(136) 评论(0) 编辑
摘要: 今天微软发布了 .NET Core 2.1 RC 1 ,虽然只是 Release Candidate 版,但已经可以在生产环境中使用。"NET Core 2.1 RC is supported by Microsoft and can be used in production." .NET Core 2.1 的性能大提升早让人垂涎三尺,看到这个消息后,忍不住今天就进行了升级。主要升级步骤如下:。。。阅读全文
posted @ 2018-05-08 21:29 dudu 阅读(948) 评论(10) 编辑
摘要: 开始想通过 aliyuncli 的 golang 源码进行编译安装(注:python 版的 aliyuncli 已不再维护),但没成功,详见 通过 golang 源码编译阿里云命令行工具 aliyuncli 出错 ,后来改为直接下载编译好的 aliyuncli ,使用前通过 aliyun configure 命令配置 access key阅读全文
posted @ 2018-04-22 17:55 dudu 阅读(122) 评论(0) 编辑
摘要: 迷人的 ASP.NET Core 有一个美中不足之处,自从一开始接触它到现在,我就一直不喜欢,一直想找到替代品,甚至想过自己实现一个,它就是 BundlerMinifier 。昨天面对 bundleconfig.json 中的一堆配置,又带着侥幸的心理试着在网上搜了搜看有没有替代品,突然发现了 LigerShark.WebOptimizer.Core阅读全文
posted @ 2018-04-19 14:59 dudu 阅读(227) 评论(2) 编辑
摘要: 关于 docker swarm mode 的基本架构,关于 overlay network ,关于服务发现与负载均衡与(Service Discovery and Load Balancing),关于 Rolling Updates ,How does it work? Docker! Part 1: Swarm general architecture阅读全文
posted @ 2018-04-07 20:57 dudu 阅读(146) 评论(0) 编辑
摘要: 阿里云服务器 centos 7.3 ,开始是通过 fstab 配置的自动挂载;但服务器启动后不能自动挂载 nas ,用 mount 命令可以手动挂载;在 /var/log/boot.log 中发现了对应的错误日志;systemctl status nas.mount 命令查看错误详情;原来是在启动过程中解析 nas 的主机名失败阅读全文
posted @ 2018-04-03 13:21 dudu 阅读(199) 评论(0) 编辑
摘要: 阿里云服务器有时会出现短暂的连接不上数据库服务器(RDS)的问题,之前由于没有启用 Entity Framework Core 的失败重试功能(默认是禁用的),短暂的连接失败立马会引发下面的异常从而出现500错误。为了解决这个问题,在 Startup 中添加如下的代码启用 RetryOnFailure 。阅读全文
posted @ 2018-02-08 21:31 dudu 阅读(287) 评论(1) 编辑
摘要: 一个即将在杭州云栖小镇举办的大会,一个以科技为主题的大会,一个面向年青人的大会,一个由自愿者组织的公益大会。。。2050,最容易让人联想到的是未来30年。身处杭州云栖小镇,眺望2050,最激动人心的畅想莫过于:未来30年杭州不仅因为西湖的美景而闻名,而且因为云栖小镇的科技创新而闻名;未来30年中国不仅成为全球的经济中心,而且成为全球的科技创新中心。阅读全文
posted @ 2018-02-01 13:58 dudu 阅读(154) 评论(0) 编辑
摘要: 今天在博问中看到一个关于 EF Core 的提问 ef core 2.0 多对多查询的问题,由于还没使用过 EF Core 的多对多映射,于是参考 EF Core 帮助文档快速写了个 .net core 控制台程序(基于 EF Core In-Memory Database)实验了一下阅读全文
posted @ 2018-01-27 22:55 dudu 阅读(366) 评论(4) 编辑
摘要: 最近在 review 代码时发现同事没有像其他项目那样使用 AutoMapper.Mapper.Initialize() 静态方法配置映射,而是使用了依赖注入 IMapper 接口的方式。于是趁机学习了解一下,在 github 上发现了 AutoMapper.Extensions.Microsoft.DependencyInjection ,使用它只需通过 AutoMapper.Profile 配置映射阅读全文
posted @ 2018-01-13 17:42 dudu 阅读(566) 评论(0) 编辑
摘要: 开始用的 bootstrap日期选择控件是 bootstrap-datepicker ,后来需要支持时间选择,改用了 eonasdan-bootstrap-datetimepicker ,它是基于 momentjs 实现的。locale 设置当前的语言。minDate 设置允许选择的最早时间,比如上面的示例设置为第2天早上9:00。format 日期时间格式(就是 momentjs 支持的格式),比如上面的示例格式对应的时间是 2018/01/10 09:00 。阅读全文
posted @ 2018-01-10 20:46 dudu 阅读(119) 评论(0) 编辑
摘要: 这是昨天解决的一个问题,针对一个 web api 的客户端代理类写集成测试,既要测试 web api,又要测试 web api 客户端。测试 web api,就要在运行测试时自动启动 web api 站点,asp.net core 中的 TestServer 就是为此而生,而且与 asp.net core 结合的天衣无缝,不仅自己可以通过I WebHostBuilder 配置站点,而且可以直接使用 web api 站点的 Startup 类。阅读全文
posted @ 2018-01-07 15:01 dudu 阅读(272) 评论(0) 编辑