前言:文件的輸出我們并不陌生,但是今天我寫的是用wcf模式進(jìn)行文件傳輸,我覺得一大好處就是能進(jìn)行服務(wù)器的監(jiān)聽。ok,現(xiàn)在來看看文件傳輸需要什么:第一需要傳輸?shù)男畔ⅲㄎ募?,流等)第二需要傳輸狀態(tài)(是否傳輸成功,傳輸失敗返回的信息)下面用圖詳細(xì)的表示下
第一步:先定義兩個(gè)類
1 [MessageContract]2 public class ResultMessage3 {4 [MessageHeader]5 public string ErrorMessage { set; get; }6 [MessageBodyMember]7 public bool IsTrue { set; get; }8 }
1 [MessageContract]2 public class StreamMessage3 {4 [MessageHeader]5 public string FileName { set; get; }6 [MessageBodyMember]7 public Stream TransferStream { set; get; }8 }
第二步:定義契約 ResultMessage UploadFile(StreamMessage message);
第三步:我們來實(shí)現(xiàn)這個(gè)契約
1:創(chuàng)建文件保存的路徑(核心源碼)
string uploadPath = @"E:/WCF/Service/";
string savePath = @"File/";
uploadPath = uploadPath + savePath;
2:接收流并保存在指定文件下
3:顯示傳輸狀態(tài)
using (FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate, Fileaccess.ReadWrite))
{
message.TransferStream.CopyTo(fileStream);
fileStream.Flush();
fileStream.Close();
resultInfo.IsTrue = true;
Console.WriteLine("成功接收客戶端傳來文件{0} {1}", message.FileName,DateTime.Now.ToString());
}
第四步:實(shí)現(xiàn)服務(wù)端
其他和前幾篇保持不變但是要修改BasicHttpBinding如下
BasicHttpBinding binding = new BasicHttpBinding();
//開啟流傳輸模式
binding.TransferMode = TransferMode.StreamedRequest;
binding.MaxBufferSize = 1024;
//設(shè)置傳輸最大的范圍
binding.MaxReceivedMessageSize = 1024*1024*1024;
第五步:開啟服務(wù)客戶端引用服務(wù)
1:選擇上傳文件(以下為核心代碼)
OpenFileDialog dfl = new OpenFileDialog();
dfl.Multiselect = true;//多選
dfl.Filter = "所有文件|*.*";//篩選文件類型文本文件(*.txt)|*.txt|所有文件(*.*)|*.*
2:進(jìn)行上傳(以下為核心代碼)
FileStream fileStream = new FileStream(lbl_show.Text, FileMode.Open, FileAccess.Read)//文件轉(zhuǎn)換成流
WinClient.IStream clientStream = new StreamClient();
WinClient.StreamMessage SMA = new WinClient.StreamMessage();
SMA.TransferStream = fileStream;
WinClient.ResultMessage message = await clientStream.UploadFileAsync(SMA);//調(diào)用服務(wù)端進(jìn)行上傳
第六步:運(yùn)行客戶端查看效果
服務(wù)端:
客戶端:
不懂的可以參考源碼或者留言。
源碼下載
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注