WCF使用NetTcp传输文件

  服务实现

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

max
Connections="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="En
cryptAndSign" />

</security>

</binding>

</netTcpBinding>

</bindings>

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

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

  maxBufferPoolSize="2147483647 "

  maxBufferSize="2147483647 "

  maxReceivedMessageSize="2147483647 "

  当然,还有配额的大小:

<behaviors>

<serviceBehaviors>

<behavior name="WCF
Library.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引用这个服务以便生成本地代理

  代码都是很简单的了:

  测试结果

  用时8秒种:

  文件信息:

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

protected void
Page_Load(object sender, EventArgs e)

{

  DateTime start = DateTime.Now;

  AddService.AddService
Client proxy = new AddService.AddServiceClient();

  proxy.UpLoad(System.IO.File.ReadAllBytes("f:/8.rmvb"));

  Response.Write(start+" 开 始---"+DateTime.Now+" 结 束");

}
<readerQuotas maxDepth="32" maxStringContentLength="2147483647 " maxArrayLength="2147483647 " maxBytesPerRead="4096" maxNameTableCharCount="16384" />   配置Behavior:

时间: 2024-10-29 06:20:35

WCF使用NetTcp传输文件的相关文章

WCF分布式开发步步为赢(4):WCF服务可靠性传输配置与编程开发

今天继续WCF分布式开发步步为赢系列的第4节:WCF服务可靠性传输配置与编程开发.这个章节,我们要介绍什么是WCF服务的可靠性传输,随便介绍网络协议的概念,Web Service为什么不支持可靠性传出,具体的WCF绑定协议和可靠性的关系,实现可靠性传输有什么方式,以及配置和开发的详细实现代码分析部分.[1]可靠性传输[2]配置方式实现可靠性传输[3]编程方式实现可靠性传输[4]编程实现必备有序传递[5]结果分析和总结. 下面进入正式的内容: [1]可靠性传输: [1.0]网络协议基础知识: 这里

使用Fiddler解析WCF RIA Service传输的数据

原文 http://www.cnblogs.com/wintersun/archive/2011/01/05/1926386.html     使用Fiddler 2 解析WCF RIA Service传输的数据,您需要安装一个PlugIn.下载解压后,放在Inspectors文件中.重新启动Fiddler,你就会看到WCF Binary的选项.       下面的场景是,点一个Button根据ID查询数据,UI如下图:            Server端Code,ItemContext是Do

WCF分布式开发步步为赢系列的(4):WCF服务可靠性传输配置与编程开发

今天继续WCF分布式开发步步为赢系列的第4节:WCF服务可靠性传输配置与编程开发.这个章节,我们要介绍什么是WCF服务的可靠性传输,随便介绍网络协议的概念,Web Service为什么不支持可靠性传出,具体的WCF绑定协议和可靠性的关系,实现可靠性传输有什么方式,以及配置和开发的详细实现代码分析部分.[1]可靠性传输[2]配置方式实现可靠性传输[3]编程方式实现可靠性传输[4]编程实现必备有序传递[5]结果分析和总结. 下面进入正式的内容: [1]可靠性传输: [1.0]网络协议基础知识: 这里

如何在linux主机和windows主机之间传输文件

首先下载pytty,解压开发现里面有plink.exe pscp.exe psftp.exe putty.exe puttygen.exe puttytel.exe等可执行文件,如果只是想要链接主机做一些操作那么使用putty.exe就可一,具体使用可以参见上面给出的链接,要想要上传下载文件,那么需要使用pscp.exe这个文件. 下面讲解使用pscp命令在Linux和Windows之间传输文件. 通过命令行进入pscp.exe所在的文件夹,直接输入pscp会看到如下提示: PS:推荐像我一样将

win8用蓝牙连接手机传输文件方法

  win8用蓝牙连接手机传输文件方法 电脑蓝牙连接手机 1.蓝牙是咱们手机上常用的功能,在微信等聊天工具出来之前,貌似有那么一段时间都是在用蓝牙进行交流,还记得一只老母猪的故事么?言归正传,在没有手机数据线以及不能上网的情况下,就需要用到蓝牙来进行文件传输了.在Windows8桌面右下角图片大家会看到蓝牙的标志,应该是这几年新出的笔记本电脑才用有的功能吧. 2.找到蓝牙图标之后,右击蓝牙图标,选择添加Bluetooth设备,进行蓝牙设备的添加. 3.如果在这里找不到蓝牙标志,那可以去系统设置中

不需要远程传输文件Linux如何关闭scp和sftp命令

  Linux用户们在进行远程文件的传输时,经常会使用scp和sftp命令来进行.不过这两个命令也会让我们的电脑存在一些风险,因此在不需要远程传输文件的时候,我们就可以将它们关闭.那么该如何禁止scp和sftp呢?下面就是具体的方法了. sftp介绍 sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能 scp介绍 两台主机之间传输文件一般使用scp命令,通常用scp命令

win7向远程机传输文件

  首先,打开开始菜单,在程序自带的 "附件" 中找到 "远程桌面连接"并打开,出现远程桌面对话框; 其次,在对话框左下角点击"选项",选择"本地资源对话框",在本地设备和资源下点击"详细信息",在弹出的对话框中选择相应的磁盘驱动器,确定,连接; 最后,输入远程机的用户名和密码,进入远程机后就可以用"复制-粘贴"的方式向远程机传输文件了.

如何应用Win7远程桌面连接功能传输文件

  在局域网中为了方便与其他工作站交流信息,我们常常会用到远程桌面功能,许多人会认为这样的功能简单得几乎不值一提,不过在实际使用过程中,我们有时会遇到各种特殊的远程桌面连接需求,要想顺利满足这些特殊的连接需求,就必须要掌握一些远程桌面的使用技巧. 让远程桌面端口躲避攻击 大家知道,在默认状态下远程桌面使用的端口一般为"3389",如果我们不及时将这个端口号码更改掉的话,那么许多别有用心的黑客可能会利用这个端口,来远程控制和入侵本地工作站,以便窃取保存在本地工作站中的各类隐私信息.为了保

Win7系统QQ无法接收/传输文件怎么办

很多电脑上都有安装腾讯QQ聊天软件,而QQ不单单只有聊天功能而已,我们还可以通过QQ视频.语音.远程和文件存储等等功能,最近有用户在win7操作系统下使用QQ传输文件时被阻止接收,导致QQ无法接收文件,其实出现这种情况主要是QQ安全权限设置所致,我们只要设置下文件传输安全级别即可,具体设置方法如下: 1.在win7 64位操作系统中登录QQ软件,并在QQ主界面下打开"设置"按钮(如下图所示); 2.在打开QQ系统设置界面后,并切换到"安全设置" 选项卡,并在左侧菜单