一起谈.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.很不错的速度,不是吗?

目录
相关文章
|
4月前
|
C++ Windows
.NET Framework安装不成功,下载`NET Framework 3.5`文件,Microsoft Visual C++
.NET Framework常见问题及解决方案汇总,涵盖缺失组件、安装失败、错误代码等,提供多种修复方法,包括全能王DLL修复工具、微软官方运行库及命令行安装等,适用于Windows系统,解决应用程序无法运行问题。
333 3
|
1月前
|
监控 Cloud Native 测试技术
.NET技术深度解析:现代企业级开发指南
每日激励:“不要一直责怪过去的自己,他曾经站在雾里也很迷茫”。我是蒋星熠Jaxonic,一名在代码宇宙中探索的极客旅人。从.NET Framework到.NET 8,我深耕跨平台、高性能、云原生开发,践行领域驱动设计与微服务架构,用代码书写技术诗篇。分享架构演进、性能优化与AI融合前沿,助力开发者在二进制星河中逐光前行。关注我,共探技术无限可能!
.NET技术深度解析:现代企业级开发指南
|
5月前
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
218 0
|
7月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
278 0
|
11月前
|
Linux C# Windows
.NET使用MiniWord高效生成Word文件
.NET使用MiniWord高效生成Word文件
343 12
|
11月前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
174 6
|
11月前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
176 6
|
12月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
242 3
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一
|
C# 数据安全/隐私保护
c#如何创建WCF服务到发布(SqlServer版已经验证)
c#如何创建WCF服务到发布(SqlServer版已经验证)
144 0