中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣實現WCF上傳文件

發布時間:2021-11-24 09:45:55 來源:億速云 閱讀:270 作者:柒染 欄目:編程語言

今天就跟大家聊聊有關怎樣實現WCF上傳文件,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

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

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

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

[ServiceContract]  publicinterfaceIUpLoadService  {  [OperationContract(Action="UploadFile",IsOneWay=true)]  voidUploadFile(FileUploadMessagerequest);  }  [MessageContract]  publicclassFileUploadMessage  {  [MessageHeader(MustUnderstand=true)]  publicstringSavePath;  [MessageHeader(MustUnderstand=true)]  publicstringFileName;  [MessageBodyMember(Order=1)]  publicStreamFileData;  }

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

publicclassUpLoadService:IUpLoadService  {  publicvoidUploadFile(FileUploadMessagerequest)  {  stringuploadFolder=@"C:\kkk\";  stringsavaPath=request.SavePath;  stringdateString=DateTime.Now.ToShortDateString()+@"\";  stringfileName=request.FileName;  StreamsourceStream=request.FileData;  FileStreamtargetStream=null;  if(!sourceStream.CanRead)  {  thrownewException("數據流不可讀!");  }  if(savaPath==null)savaPath=@"Photo\";  if(!savaPath.EndsWith("\\"))savaPath+="\\";   uploadFolderuploadFolder=uploadFolder+savaPath+dateString;  if(!Directory.Exists(uploadFolder))  {  Directory.CreateDirectory(uploadFolder);  }  stringfilePath=Path.Combine(uploadFolder,fileName);  using(targetStream=newFileStream(filePath,FileMode.Create,FileAccess.Write,FileShare.None))  {  //readfromtheinputstreamin4Kchunks  //andsavetooutputstream  constintbufferLen=4096;  byte[]buffer=newbyte[bufferLen];  intcount=0;  while((count=sourceStream.Read(buffer,0,bufferLen))>0)  {  targetStream.Write(buffer,0,count);  }  targetStream.Close();  sourceStream.Close();  }  }  }

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

<system.serviceModel> <bindings> <basicHttpBinding> <bindingnamebindingname="FileTransferServicesBinding"maxReceivedMessageSize="9223372036854775807"  messageEncoding="Mtom"transferMode="Streamed"sendTimeout="00:10:00"/> </basicHttpBinding> </bindings> <services> <servicebehaviorConfigurationservicebehaviorConfiguration="UploadWcfService.UpLoadServiceBehavior" name="UploadWcfService.UpLoadService"> <endpointaddressendpointaddress=""binding="basicHttpBinding"bindingConfiguration="FileTransferServicesBinding"contract="UploadWcfService.IUpLoadService"> </endpoint> <endpointaddressendpointaddress="mex"binding="mexHttpBinding"contract="IMetadataExchange"/> </service> </services> <behaviors> <serviceBehaviors> <behaviornamebehaviorname="UploadWcfService.UpLoadServiceBehavior"> <serviceMetadatahttpGetEnabledserviceMetadatahttpGetEnabled="true"/> <serviceDebugincludeExceptionDetailInFaultsserviceDebugincludeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>

看完上述內容,你們對怎樣實現WCF上傳文件有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

wcf
AI

裕民县| 二手房| 蒙自县| 资讯| 梨树县| 平泉县| 堆龙德庆县| 张家界市| 聊城市| 花莲县| 常宁市| 饶阳县| 江津市| 贵南县| 孝义市| 沙洋县| 关岭| 祁门县| 自治县| 隆回县| 惠东县| 同德县| 双江| 东丽区| 虎林市| 尤溪县| 平邑县| 平和县| 伊春市| 花莲县| 昭平县| 南漳县| 定襄县| 夏河县| 固始县| 滨海县| 五家渠市| 北碚区| 诸暨市| 桑日县| 嘉善县|