当前位置: 首页 > news >正文

WCF使用NetTcp传输文件

今天看了一些官方的资料和配置,简单写了一个WCF服务来传递一个文件,借此看看WCF传输大文件的能力,这里采用的是NetTcp绑定,之所以没有采用basicHttpBinding是因为考虑这种方式和WebService相近,大家都写的比较多了。

服务实现

服务中有一个上传二进制流的方法UpLoad

[ServiceContract]
public interface IAddService
{
[OperationContract]
void UpLoad(byte[] file);
}

(为了减少时间,采用了一点硬编码)

public class AddService:IAddService
{
public void UpLoad(byte[] file)
{
System.IO.File.WriteAllBytes("d:/8.rmvb", file);//将上传的文件放到D盘下并命名
}
}

服务的配置

App.config是WCF的重头戏,这里的配置直接影响到服务的成败和性能。

先定义一个netTcpBinding供服务使用

<bindings>
<netTcpBinding>
<binding name="netTcpBindConfig"
closeTimeout="00:01:00"
openTimeout="00:01:00"
receiveTimeout="00:10:00"
sendTimeout="00:01:00"
transactionFlow="false"
transferMode="Buffered"
transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard"
listenBacklog="10"
maxBufferPoolSize="2147483647 "
maxBufferSize="2147483647 "
maxConnections="10"
maxReceivedMessageSize="2147483647 ">
<readerQuotas maxDepth="32"
maxStringContentLength="2147483647 "
maxArrayLength="2147483647 "
maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<reliableSession ordered="true"
inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
</security>
</binding>
</netTcpBinding>
</bindings>

这个配置需要注意maxConnections="10" 这个选项,如果你想改成最大连接为100就会在运行时报下面的错误。查了一下MSDN,原来如果是windows7,xp,2000,vista在TCP的同时在线数量是有限制的,超出10就会报错。而如果想要更大的连接数,需要部署到windows server上。 

 如果想传输大文件,下面几个配置也是必不可少的

maxBufferPoolSize="2147483647 "

maxBufferSize="2147483647 "

maxReceivedMessageSize="2147483647 "

当然,还有配额的大小

<readerQuotas maxDepth="32maxStringContentLength="2147483647 maxArrayLength="2147483647 maxBytesPerRead="4096maxNameTableCharCount="16384/>

配置Behavior

<behaviors>
<serviceBehaviors>
<behavior name="WCFLibrary.UpdateUserBehavior">
<serviceMetadata/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<service behaviorConfiguration="WCFLibrary.UpdateUserBehavior" name="WCFLibrary.AddService">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:4506/AddService"/>
</baseAddresses>
</host>
<endpoint address="" binding="netTcpBinding" contract="WCFLibrary.IAddService" bindingConfiguration="netTcpBindConfig"></endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint>
</service>

客户端调用

服务配置好后,启动,客户端使用net.tcp://localhost:4506/AddService/mex引用这个服务以便生成本地代理

代码都是很简单的了

protected void Page_Load(object sender, EventArgs e)
{
DateTime start = DateTime.Now;
AddService.AddServiceClient proxy = new AddService.AddServiceClient();
proxy.UpLoad(System.IO.File.ReadAllBytes("f:/8.rmvb"));
Response.Write(start+" 开 始---"+DateTime.Now+" 结 束");
}

 

 

测试结果

用时8秒种 

 文件信息:  

 

   

 

文件按照151M,传输时间是8秒来计算,大概用时为:151(M)/8(S)=18.875M/S.很不错的速度,不是吗?

 

关于WCF传输大文件,您有什么看法,欢迎交流。

 



     本文转自wengyuli 51CTO博客,原文链接:http://blog.51cto.com/wengyuli/586754,如需转载请自行联系原作者




相关文章:

  • 《WCF技术内幕》翻译4:第1部分_第1章_蓝月亮:商业示例
  • 一个引号导致1个小时网站打不开
  • MySQL令人头疼的Aborted告警案例分析
  • 用C#完成Swift远程推送通知
  • 3不原则:如何在HIT行业找到合适的“东家”
  • 容易被忽视的Linux磁盘配额设置
  • 存储过程与函数的区别
  • eclipse在线安装jetty插件的方法
  • [C#]猫叫人醒老鼠跑 C#的委托及事件
  • 3星|《财经天下周刊》2017年21期:海外购几乎是亚马逊中国的最后一根救命稻草...
  • java对象与json对象间的相互转换
  • ELK日志分析单机系统详解
  • IDEA Git 配置及使用
  • ssh批量管理分发项目实战介绍与实践
  • Linux防火墙详解(一)
  • 【译】JS基础算法脚本:字符串结尾
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Facebook AccountKit 接入的坑点
  • Java比较器对数组,集合排序
  • vue2.0项目引入element-ui
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 搞机器学习要哪些技能
  • 前端存储 - localStorage
  • 深入 Nginx 之配置篇
  • 线上 python http server profile 实践
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 数据库巡检项
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​学习一下,什么是预包装食品?​
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2)MFC+openGL单文档框架glFrame
  • (2)nginx 安装、启停
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (三)终结任务
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • .libPaths()设置包加载目录
  • .NET Core WebAPI中封装Swagger配置
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .Net 代码性能 - (1)
  • .net 托管代码与非托管代码
  • .net6Api后台+uniapp导出Excel
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET实现之(自动更新)
  • .NET文档生成工具ADB使用图文教程
  • .pop ----remove 删除
  • .project文件
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • []指针
  • [14]内置对象
  • [AIGC] Java 和 Kotlin 的区别