一起谈.NET技术,WCF使用NetTcp传输文件

简介:   服务实现  服务中有一个上传二进制流的方法UpLoad:[ServiceContract]public interface IAddService{  [OperationContract]  void UpLoad(byte[] file);}  (为了减少时间,采用了一点硬编...

  服务实现

  服务中有一个上传二进制流的方法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上。

image

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

  maxBufferPoolSize="2147483647 "

  maxBufferSize="2147483647 "  

   maxReceivedMessageSize="2147483647 "

  当然,还有配额的大小:

 
 
< readerQuotas maxDepth ="32" maxStringContentLength ="2147483647 " maxArrayLength ="2147483647 " maxBytesPerRead ="4096" maxNameTableCharCount ="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秒种:

image

  文件信息:

 

image image

image

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

目录
相关文章
|
5月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
187 0
|
9月前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
132 6
|
9月前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
123 6
|
10月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
126 4
|
10月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
202 3
|
10月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
107 3
|
10月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
308 3
|
9月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
228 5
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
378 0
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
197 7