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

手把手教你實現(xiàn)WCF上傳文件

開發(fā) 后端
文章主要實現(xiàn)WCF上傳文件,有詳細的步驟和代碼介紹,喜歡研究WCF的朋友一定要仔細閱讀,希望對大家有技術(shù)上的提高。

在優(yōu)酷上我想上傳一段視頻,你有想過會臺是怎么實現(xiàn)的嗎?這里我就為大家分析一下關(guān)于利用WCF上傳文件,在WCF沒出現(xiàn)之前,我一直使用用WebService來上傳文件,我不知道別人為什么要這么做,因為我們的文件服務(wù)器和網(wǎng)站后臺和網(wǎng)站前臺都不在同一個機器,操作人員覺得用FTP傳文件太麻煩,我就做一個專門用來上傳文件的WebService,把這個WebService部署在文件服務(wù)器上,然后在網(wǎng)站后臺調(diào)用這個WebService,把網(wǎng)站后臺頁面上傳上來的文件轉(zhuǎn)化為字節(jié)流傳給WebService,然后WebService把這個字節(jié)流保存文件到一個只允許靜態(tài)頁面的網(wǎng)站(靜態(tài)網(wǎng)站可以防止一些腳本木馬)。

#T#WebService來上傳文件存在的問題是效率不高,而且不能傳輸大數(shù)據(jù)量的文件,當然你可以用Wse中的MTOM來傳輸大文件,有了WCF就好多了,通過使用WCF傳遞Stream對象來傳遞大數(shù)據(jù)文件,但有一些限制:只有BasicHttpBinding、NetTcpBinding和NetNamedPipeBinding支持傳送流數(shù)據(jù)。流數(shù)據(jù)類型必須是可序列化的Stream或MemoryStream。傳遞時消息體(MessageBody)中不能包含其他數(shù)據(jù)。TransferMode的限制和MaxReceivedMessageSize的限制等。

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

  1. [ServiceContract]  
  2. publicinterfaceIUpLoadService  
  3. {  
  4. [OperationContract(Action="UploadFile",IsOneWay=true)]  
  5. voidUploadFile(FileUploadMessagerequest);  
  6. }  
  7. [MessageContract]  
  8. publicclassFileUploadMessage  
  9. {  
  10. [MessageHeader(MustUnderstand=true)]  
  11. publicstringSavePath;  
  12. [MessageHeader(MustUnderstand=true)]  
  13. publicstringFileName;  
  14. [MessageBodyMember(Order=1)]  
  15. publicStreamFileData;  

定義FileUploadMessage類的目的是因為第三個限制,要不然文件名和存放路徑就沒辦法傳遞給WCF了,根據(jù)第二個限制,文件數(shù)據(jù)是用System.IO.Stream來傳遞的接口方法只有一個,就是WCF上傳文件,注意方法參數(shù)是FileUploadMessage接口實現(xiàn)類文件的代碼如下:

  1. publicclassUpLoadService:IUpLoadService  
  2. {  
  3. publicvoidUploadFile(FileUploadMessagerequest)  
  4. {  
  5. stringuploadFolder=@"C:\kkk\";  
  6. stringsavaPath=request.SavePath;  
  7. stringdateString=DateTime.Now.ToShortDateString()+@"\";  
  8. stringfileName=request.FileName;  
  9. StreamsourceStream=request.FileData;  
  10. FileStreamtargetStream=null;  
  11. if(!sourceStream.CanRead)  
  12. {  
  13. thrownewException("數(shù)據(jù)流不可讀!");  
  14. }  
  15. if(savaPath==null)savaPath=@"Photo\";  
  16. if(!savaPath.EndsWith("\\"))savaPath+="\\";  
  17.  
  18. uploadFolderuploadFolder=uploadFolder+savaPath+dateString;  
  19. if(!Directory.Exists(uploadFolder))  
  20. {  
  21. Directory.CreateDirectory(uploadFolder);  
  22. }  
  23. stringfilePath=Path.Combine(uploadFolder,fileName);  
  24. using(targetStream=newFileStream(filePath,FileMode.Create,FileAccess.Write,FileShare.None))  
  25. {  
  26. //readfromtheinputstreamin4Kchunks  
  27. //andsavetooutputstream  
  28. constintbufferLen=4096;  
  29. byte[]buffer=newbyte[bufferLen];  
  30. intcount=0;  
  31. while((count=sourceStream.Read(buffer,0,bufferLen))>0)  
  32. {  
  33. targetStream.Write(buffer,0,count);  
  34. }  
  35. targetStream.Close();  
  36. sourceStream.Close();  
  37. }  
  38. }  
  39. }  

實現(xiàn)的功能是到指定目錄下按照日期進行目錄劃分,然后以傳過來的文件名保存文件。這篇文章最主要的地方就是下面的Web.Config配置:

  1. <system.serviceModel> 
  2. <bindings> 
  3. <basicHttpBinding> 
  4. <bindingnamebindingname="FileTransferServicesBinding"maxReceivedMessageSize="9223372036854775807"  
  5. messageEncoding="Mtom"transferMode="Streamed"sendTimeout="00:10:00"/> 
  6. </basicHttpBinding> 
  7. </bindings> 
  8. <services> 
  9. <servicebehaviorConfigurationservicebehaviorConfiguration="UploadWcfService.UpLoadServiceBehavior" 
  10. name="UploadWcfService.UpLoadService"> 
  11. <endpointaddressendpointaddress=""binding="basicHttpBinding"bindingConfiguration="FileTransferServicesBinding"contract="UploadWcfService.IUpLoadService"> 
  12. </endpoint> 
  13. <endpointaddressendpointaddress="mex"binding="mexHttpBinding"contract="IMetadataExchange"/> 
  14. </service> 
  15. </services> 
  16. <behaviors> 
  17. <serviceBehaviors> 
  18. <behaviornamebehaviorname="UploadWcfService.UpLoadServiceBehavior"> 
  19. <serviceMetadatahttpGetEnabledserviceMetadatahttpGetEnabled="true"/> 
  20. <serviceDebugincludeExceptionDetailInFaultsserviceDebugincludeExceptionDetailInFaults="false"/> 
  21. </behavior> 
  22. </serviceBehaviors> 
  23. </behaviors> 
  24. </system.serviceModel> 
責(zé)任編輯:田樹 來源: 博客
相關(guān)推薦

2009-07-03 17:15:31

jsp上傳文件

2023-04-26 12:46:43

DockerSpringKubernetes

2011-04-28 09:23:36

REST

2011-01-06 10:39:25

.NET程序打包

2021-07-14 09:00:00

JavaFX開發(fā)應(yīng)用

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機

2025-05-07 00:31:30

2022-03-29 11:11:11

TortoisGitGitee碼云

2011-04-21 10:32:44

MySQL雙機同步

2020-05-15 08:07:33

JWT登錄單點

2021-03-12 10:01:24

JavaScript 前端表單驗證

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用

2022-03-14 14:47:21

HarmonyOS操作系統(tǒng)鴻蒙

2022-07-27 08:16:22

搜索引擎Lucene

2022-12-07 08:42:35

2011-02-22 13:46:27

微軟SQL.NET

2021-02-26 11:54:38

MyBatis 插件接口

2021-12-28 08:38:26

Linux 中斷喚醒系統(tǒng)Linux 系統(tǒng)

2011-02-22 14:36:40

ASP.NETmsdnC#
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 九九久久久| 色播99 | 亚洲区一区二 | 国产在线视频一区 | 亚洲狠狠爱 | 91久久精品国产91久久性色tv | 久久高清| 一区二区三区精品视频 | 99久久久国产精品 | 成人免费视频播放 | 亚洲精品久久久一区二区三区 | 亚洲国产成人在线 | 91精品国产综合久久久亚洲 | 97精品国产97久久久久久免费 | 日韩视频专区 | 久久久91| 中文字幕av在线一二三区 | 日韩高清中文字幕 | 99re热这里只有精品视频 | 久久国产精品精品国产色婷婷 | 91精品一区二区 | 国产在线精品一区二区 | 久久久久久免费免费 | 中文字幕亚洲一区 | 亚洲黄色高清视频 | 欧美日韩一区精品 | 久久久久久久一级 | 天天操操 | 欧美成人一区二免费视频软件 | 国产精品片aa在线观看 | 亚洲视频网 | 天天看片天天干 | 国产精品欧美日韩 | 99在线视频观看 | 久久久久成人精品亚洲国产 | 日韩一及片 | 91精品国产日韩91久久久久久 | 中文字幕亚洲区一区二 | www.嫩草 | 午夜看电影在线观看 | 女同久久另类99精品国产 |