大比速:remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful)
近来在考虑一个服务选型,dotnet提供了众多的远程服务形式。在只考虑dotnet到dotnet的情形下,我们可以选择remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful)
其中我考察的重点是前4项的效率差异,而在我的测试项目中他们共用同一个接口定义
[ServiceContract]
public interface ICalc
{
[OperationContract]
[WebInvoke(Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "cmd")]
CalcInfo Calc(CalcInfo pInfo);
}
先来对比传入较为简单的CalcInfo,该类的json只有如下,其中集合Items是空的
{
"id": 0,
"method": "test",
"para1": 0,
"para2": 0,
"result": 999,
"items": []
}
测试从客户端将一个CalcInfo的实例传入服务端,服务端稍加修改Method返回给客户端的过程,主要测试序列化与传输的用时。记录执行10000次请求的总用时
Remoting用时 3.76s
WCF(http) 用时 21.92s
WCF(tcp)用时 5.96s
WCF(RESTful)用时 2.26s
asp.net Core(RESTfull)用时 16.59s
再来一下比较传输一个较大的CalcInfo,该类的json如下,其中items集合有100个子实例
{
"id": 0,
"method": "test",
"para1": 0,
"para2": 0,
"result": 999,
"items": [
{
"name": "test 1",
"para1": 1,
"para2": 0
},
{
"name": "test 2",
"para1": 2,
"para2": 0
}
//....共有100个子项
]
}
Remoting用时 12.94s
WCF(http) 用时 47.38s
WCF(tcp)用时 9.2s
WCF(RESTful)用时 10.67s
asp.net Core(RESTfull)用时 26.08s
把两个时间放在一起对比一下就很有意思了。小流量时remoting比WCF强,WCF(TCP)莫名的高用时,比json的还要高。在大流量的时候WCF的优势体现出来了,基本符合网上大致的观点。其中WCF(RESTful)让kevin-y印象深刻,几乎与TCP一样的成绩
小流量
Remoting用时 3.76s
WCF(http) 用时 21.92s
WCF(tcp)用时 5.96s
WCF(RESTful)用时 2.26s
asp.net Core(RESTfull)用时 16.59s
大流量
Remoting用时 12.94s
WCF(http) 用时 47.38s
WCF(tcp)用时 9.2s
WCF(RESTful)用时 10.67s
asp.net Core(RESTfull)用时 26.83s
测试的源代码来这
https://files.cnblogs.com/files/kevin-Y/SrvSpeed2.zip
大比速:remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful)的更多相关文章
- 大比速:remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful) .net core 控制台程序使用依赖注入(Autofac)
大比速:remoting.WCF(http).WCF(tcp).WCF(RESTful).asp.net core(RESTful) 近来在考虑一个服务选型,dotnet提供了众多的远程服务形式.在只 ...
- WCF 采用net.tcp协议
WCF 采用net.tcp协议实践 概述 与Socket相比,WCF真是爽得不得了,其基本指导思想为SOA——面向服务. 其基本配置在于ABC(Address,Binding,Contract), ...
- 如何在wcf中用net tcp协议进行通讯
快速阅读 如何在wcf中用net tcp协议进行通讯,一个打开Wcf的公共类.比较好好,可以记下来. 配置文件中注意配置 Service,binding,behaviors. Service中配置en ...
- WCF入门教程:WCF基础知识问与答(转)
学习WCF已有近两年的时间,其间又翻译了Juval的大作<Programming WCF Services>,我仍然觉得WCF还有更多的内容值得探索与挖掘.学得越多,反而越发觉得自己所知太 ...
- WCF学习之旅—WCF服务的批量寄宿(十三)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) WCF学习之旅—WCF ...
- WCF入门教程1——WCF简要介绍
什么是WCF Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台. 整合了原有的windo ...
- WCF入门教程三[WCF的宿主]
一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...
- 无废话WCF入门教程三[WCF的宿主]
一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...
- 【转】WCF入门教程三[WCF的宿主]
一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...
随机推荐
- js跨域传值,兼容ie8以上
js跨域传值,兼容ie8以上 事先说明,此方法并不支持ie8,如果想要支持ie8的话,需要用这种思路(来自微软): if (window.addEventListener) { window.addE ...
- springboot发送邮件
1.在发送端邮箱平台开通SMTP服务 1)以163邮箱为例: step 1: step 2: 2.编写代码: 1)添加发送邮箱maven依赖 <dependency> <groupI ...
- IOS搜索框输入中文解决方案(防抖)
class Header extends React.Component { constructor(props) { super(props); this.time = 0; // 重点在于这个th ...
- python 列表 list的基本操作
一,Python 的列表数据类型包含更多的方法. 这里是所有的列表对象方法: list.append(x) 把一个元素添加到链表的结尾,相当于 a[len(a):] = [x] . list.exte ...
- java中封装类(二)
java中的数字类型包括 Byte,Short,Integer,Long,Float,Double.其中前四个是整数,后两个是浮点数. 在说java中数字类型之前先来看看它们统一的基类Number. ...
- python装饰器补漏
以前写过一篇装饰器文章,觉得少了点东西,今天特来补上,也就是带参数的装饰器,上篇文章写的不严谨 def logger(logs=""): def outer(f): def inn ...
- CSS定位方法
- 今天花了好长的时间终于把SecureCRT安装成功了 现在分享给大家 安装的步骤, 希望对大家用帮助
转载地址:https://www.cnblogs.com/lianghe01/p/6618651.html 今天花了好长的时间终于把SecureCRT安装成功了 现在分享给大家 安装的步骤, 希望对大 ...
- 记账本,C,Github,util
package util; import java.awt.Component; import java.awt.Dimension; import javax.swing.JButton; impo ...
- JSON转Excel
1.引入js (dist目录下JsonExportExcel.min.js) <script src="https://cuikangjie.github.io/JsonExportE ...