记一次tcp连接超时的问题分析
现象:
IIS站点下使用Restsharp.dll通过HTTP协议调用远程接口,时常发现调用失败,System.Net返回TCP错误,代码10060,表示超时或无响应。
通过安装Wireshark抓包发现,Client连接服务器的TCP第一次握手,发送SYN失败,导致多次重传,仍然失败后,没有后续的HTTP请求了。
现象:
IIS站点下使用Restsharp.dll通过HTTP协议调用远程接口,时常发现调用失败,System.Net返回TCP错误,代码10060,表示超时或无响应。
通过安装Wireshark抓包发现,Client连接服务器的TCP第一次握手,发送SYN失败,导致多次重传,仍然失败后,没有后续的HTTP请求了。
扩展方法可以让你在不对原有类型进行修改、继承和重新编译的条件下,添加一些额外功能。扩展方法是一种特定类型的静态方法,但可以通过原始类型的实例进行调用。通过C#实现的扩展方法在使用方法上跟原始类型的真实定义的方法没有不同。
因此上述特性很适合在对一些类库进行二开时使用,如笔者就是通过项目中发现对newtonsoft.json.dll进行扩展才了解到这个知识点的。可见多读项目代码还是多少有用的!
最常用的扩展方法要数对于System.Collections.IEnumerable和System.Collections.Generic.IEumerable<T>类型添加LINQ查询操作。要使用标准的LINQ查询方法,只要引入System.Linq命名空间,然后在任何实现IEnumerable<T>接口的类型实例中都可以使用GroupBy, OrderBy, Average等方法,如List<T>和Array。
本文只是一个简单的知识点,撰文起因是之前在项目中用到内部类的JSON序列化有问题,后来发现是自己写法错误。这里权当一个记录吧。
在通过继承方式实现语言的多态性时,对有转换和替换关系的基类、子类对象进行JSON的序列化和反序列化,需要设置JsonSerializerSettings中的类型名称TypeNameHandling枚举才能生效。
工作中经常会开发一些接口公布出去,接口以HTTPHandler方式挂载在ASP.NET上,是以*.filetype的后缀形式路由到具体的处理类中。接口参数以JSON格式通过post方法写在Request body中,宿主的ERP系统并没有提供对应的参数校验框架,因此无法像其他基于其他API框架的形式,对输入参数进行统一的校验。
本文针对这种情况,将介绍下JSON.NET自带的JSON Schema校验方式。