成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WCF上傳文件解決方案剖析

開發 開發工具
我們今天會在這篇文章中為大家詳細介紹一下WCF上傳文件的相關實現方法,以方便大家在實際應用中獲得一些幫助。

WCF是一個.NET Framework 3.5的重要組成部分,它的書籍應用給開發人員帶來了非常大的幫助。我們今天就可以先從WCF上傳文件的相關步驟,來分析一下這一工具的簡單實現方法,幫助我們理解應用。#t#

在WCF沒出現之前,我一直使用用WebService來上傳文件,我不知道別人為什么要這么做,因為我們的文件服務器和網站后臺和網站前臺都不在同一個機器,操作人員覺得用FTP傳文件太麻煩,我就做一個專門用來上傳文件的WebService,把這個WebService部署在文件服務器上,然后在網站后臺調用這個WebService,把網站后臺頁面上傳上來的文件轉化為字節流傳給WebService,然后WebService把這個字節流保存文件到一個只允許靜態頁面的網站(靜態網站可以防止一些腳本木馬)。

WebService來上傳文件存在的問題是效率不高,而且不能傳輸大數據量的文件,當然你可以用Wse中的MTOM來傳輸大文件,有了WCF就好多了,通過使用WCF傳遞Stream對象來傳遞大數據文件,但有一些限制:

1、只有 BasicHttpBinding、NetTcpBinding 和 NetNamedPipeBinding 支持傳送流數據。

2、 流數據類型必須是可序列化的 Stream 或 MemoryStream。

3、 傳遞時消息體(Message Body)中不能包含其他數據。

4、TransferMode的限制和MaxReceivedMessageSize的限制等。

下面具體實現:新建一個WCFService,接口文件的代碼如下:

  1. [ServiceContract]  
  2. public interface IUpLoadService  
  3. {  
  4. [OperationContract(Action = "UploadFile"IsOneWay = true)]  
  5. void UploadFile(FileUploadMessage request);  
  6. }  
  7. [MessageContract]  
  8. public class FileUploadMessage  
  9. {  
  10. [MessageHeader(MustUnderstand = true)]  
  11. public string SavePath;  
  12. [MessageHeader(MustUnderstand = true)]  
  13. public string FileName;  
  14. [MessageBodyMember(Order = 1)]  
  15. public Stream FileData;  

 

定義FileUploadMessage類的目的是因為第三個限制,要不然文件名和存放路徑就沒辦法傳遞給WCF了,根據第二個限制,文件數據是用System.IO.Stream來傳遞的接口方法只有一個,就是WCF上傳文件,注意方法參數是FileUploadMessage

接口實現類文件的代碼如下:

  1. public class UpLoadService : IUpLoadService  
  2. {  
  3. public void UploadFile(FileUploadMessage request)  
  4. {  
  5. string uploadFolder = @"C:\kkk\";  
  6. string savaPath = request.SavePath;  
  7. string dateString = DateTime.Now.ToShortDateString() + @"\";  
  8. string fileName = request.FileName;  
  9. Stream sourceStream = request.FileData;  
  10. FileStream targetStream = null;  
  11. if (!sourceStream.CanRead)  
  12. {  
  13. throw new Exception("數據流不可讀!");  
  14. }  
  15. if (savaPath == null) savaPath = @"Photo\";  
  16. if (!savaPath.EndsWith("\\")) savaPath += "\\";  
  17. uploadFolderuploadFolder = uploadFolder + savaPath + dateString;  
  18. if (!Directory.Exists(uploadFolder))  
  19. {  
  20. Directory.CreateDirectory(uploadFolder);  
  21. }  
  22. string filePath = Path.Combine(uploadFolder, fileName);  
  23. using (targetStream = new FileStream(filePath, FileMode.Create, 
    FileAccess.Write, FileShare.None))  
  24. {  
  25. //read from the input stream in 4K chunks  
  26. //and save to output stream  
  27. const int bufferLen = 4096;  
  28. byte[] buffer = new byte[bufferLen];  
  29. int count = 0;  
  30. while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0)  
  31. {  
  32. targetStream.Write(buffer, 0, count);  
  33. }  
  34. targetStream.Close();  
  35. sourceStream.Close();  
  36. }  
  37. }  

 

實現的功能是到指定目錄下按照日期進行目錄劃分,然后以傳過來的文件名保存文件。

這篇WCF上傳文件的文章最主要的地方就是下面的Web.Config配置:

 

 

 

  1. < system.serviceModel> 
  2. < bindings> 
  3. < basicHttpBinding> 
  4. < binding name="FileTransferServicesBinding" 
    maxReceivedMessageSize="9223372036854775807" 
  5. messageEncoding="Mtom" transferMode="Streamed" sendTimeout="00:10:00" /> 
  6. < /basicHttpBinding> 
  7. < /bindings> 
  8. < services> 
  9. < service behaviorConfiguration="UploadWcfService.UpLoadServiceBehavior" 
  10. name="UploadWcfService.UpLoadService"> 
  11. < endpoint address="" binding="basicHttpBinding" bindingConfiguration=
    "FileTransferServicesBinding" contract="UploadWcfService.IUpLoadService"> 
  12. < /endpoint> 
  13. < endpoint address="mex" binding="mexHttpBinding" 
    contract="IMetadataExchange" /> 
  14. < /service> 
  15. < /services> 
  16. < behaviors> 
  17. < serviceBehaviors> 
  18. < behavior name="UploadWcfService.UpLoadServiceBehavior"> 
  19. < serviceMetadata httpGetEnabled="true" /> 
  20. < serviceDebug includeExceptionDetailInFaults="false" /> 
  21. < /behavior> 
  22. < /serviceBehaviors> 
  23. < /behaviors> 
  24. < /system.serviceModel> 

 

 

配置要遵循上面的***條和第四條限制,因為默認.net只能傳4M的文件,所以要在< System.Web>配置節下面加上< httpRuntimemaxRequestLength="2097151" />

以上就是對WCF上傳文件的相關介紹。

責任編輯:曹凱 來源: 博客園
相關推薦

2010-02-23 14:56:18

WCF Bug

2009-12-07 15:50:27

WCF文件

2010-02-24 09:28:37

WCF安全配置

2010-02-24 14:05:08

WCF openati

2009-11-06 15:25:25

WCF異常

2010-02-26 15:46:48

Silverlight

2009-12-08 15:19:58

WCF大數據量

2010-02-25 14:53:44

WCF調用服務異常

2009-12-30 14:31:57

PPPoA體系

2009-01-19 17:31:14

2009-11-09 11:31:47

WCF消息隊列

2010-02-23 17:49:56

WCF傳輸大數據

2010-02-24 10:55:01

WCF跨域訪問

2009-11-16 13:46:28

PHP上傳文件大小限制

2009-11-16 09:45:51

PHP上傳文件大小

2025-06-09 07:45:00

2010-08-03 14:58:38

APC

2010-09-27 16:23:28

APC

2009-01-16 18:11:01

2017-07-04 15:10:20

移動端圖片旋轉壓縮
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产在线观 | 神马影院一区二区三区 | 国产精品久久久久久吹潮 | 在线看av的网址 | 一级片在线观看 | 国产午夜精品视频 | 欧美极品在线播放 | 国产97视频在线观看 | 欧美a√ | 日韩成人免费视频 | 国产欧美日韩综合精品一区二区 | 国产精品久久久久久久久久久免费看 | 午夜电影福利 | 国产精品99久久久久久动医院 | 青青久在线视频 | 成人日韩av | 国产精品免费一区二区三区 | 国产区在线观看 | 日韩高清www | 91精品国产高清久久久久久久久 | 亚洲天堂影院 | 亚洲精品成人网 | 亚洲综合视频 | 91精品一区二区三区久久久久久 | 99热精品久久 | 国产成人福利视频在线观看 | 中日字幕大片在线播放 | 中文字幕高清视频 | 一区二区不卡 | 在线观看视频h | 欧美日韩网站 | 亚洲视频中文字幕 | 毛片高清| 黄色精品| 特级黄一级播放 | 国产精品久久久久久久岛一牛影视 | 亚洲成人国产 | 在线观看一区 | 日本啊v在线 | 四虎影 | 国产免费av在线 |