台灣最大程式設計社群網站
線上人數
1069
 
會員總數:246713
討論主題:190131
歡迎您免費加入會員
討論區列表 >> C# >> 關於wcf 分次傳輸大量的資料
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
關於wcf 分次傳輸大量的資料
價值 : 15 QP  點閱數:1275 回應數:15
樓主

陳政傑
門外漢
0 33
850 124
發送站內信

想請問關於分次傳輸大量的資料(SQLServer...)有甚麼比較好的方法 希望能不改MaxReceivedMessageSize 讓他維持在預設下進行資料讀取
雖然目前所遇到的資料量不會大於maxReceivedMessageSize = "2147483647" 但不保證未來讀取的資料不會大於最大值 我希望能以後不改動而能讀取所有的資料
我也有去查詢過國外網站 許多人也是建議一次讀取100筆之後再讀取接下來的100筆 但我是希望能一次跟Server端連線之後能把我所有的資料庫資料讀取至datagridview中
我有參考 https://dotblogs.com.tw/jeff-yeh/2009/09/27/10798 分次讀取圖片 也練習過如何使用
但讀取SQL資料的撰寫卻不是很順利 我想問問各位有關於其他分次傳輸的方法嗎?(不使用壓縮)


搜尋相關Tags的文章: [ wcf ] ,
本篇文章發表於2017-05-31 15:26
1樓
回應

春天
檢舉此回應
1.讀取資料庫
2.序列化資料
3.將序列化資料(字串)轉成Stream
4.參考你貼的網站進行傳輸
本篇文章回覆於2017-05-31 17:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

陳政傑
檢舉此回應
我目前的方式就是像春天說的方法先將資料庫轉成Dataset之後轉成byte資料在傳輸到Client端接收 在還原成dataset時讀取至datagridview卻是空的 但可能是我哪裡有出錯我在檢查看看
本篇文章回覆於2017-06-01 08:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

陳政傑
檢舉此回應
目前不了解為甚麼程式進入


會一直無窮迴圈 明明才測試5筆資料卻出不來 能幫我看一下嗎? 我是按照網頁上的試試的
本篇文章回覆於2017-06-01 11:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

春天
檢舉此回應

本篇文章回覆於2017-06-01 11:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

陳政傑
檢舉此回應
那請問我需要怎麼改會比較好呢? 我有去測試範例讀取圖檔 我有讀出來 我就照著上面改但怎麼會是不一樣的結果呢?



基本上是一樣的但怎麼一個可以讀取 一個卻是無窮迴圈呢?
本篇文章回覆於2017-06-01 11:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

春天
檢舉此回應
你有理解Server端服務方法GetPic(FileName, OffSet, ChunkSize)內部怎麼運作的嗎
本篇文章回覆於2017-06-01 12:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

陳政傑
檢舉此回應
我知道我哪裡出問題了 在Server端
關於範例中
using (FileStream fs = new FileStream(Path.Combine(@"C:\\Users\\User\\Desktop", FileName), FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
這段 如果我要讀的是資料庫 那我該怎麼去改呢? 因為他讀的是單一檔案我的卻是資料庫 不太一樣
本篇文章回覆於2017-06-01 13:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

春天
檢舉此回應
1.讀取資料庫
2.DataTable序列化
3.String To Stream
本篇文章回覆於2017-06-01 14:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

陳政傑
檢舉此回應
恩..這方面我有完成 現在是卡在如果我要傳輸大量資料筆數 就需要分批傳輸 這方面我就不解了 因為需要用到

Server端



Client端




需要紀錄讀取到第幾位之後再去抓從第幾位開始之後的值 重復執行 但我現在不知道Server端那邊要如何去改

小資料介於65536的資料照一般方法可以正常讀取 但大於他就需要用到分批存取
(不改MAXMESSAGESIZE)
本篇文章回覆於2017-06-01 14:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

春天
檢舉此回應
1.讀取資料庫,取出資料,型態為DataTable
2.DataTable序列化,序列化後型態為String
3.String To Stream,將String寫入資料流,型態為Stream
4.傳輸
本篇文章回覆於2017-06-01 14:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

陳政傑
檢舉此回應
恩...不是很懂

我第1步跟你一樣讀取成 datatable
2.我就直接轉成byte傳送了

Sql_dt是datatable

MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, Sql_dt);
byte[] tableBT = ms.ToArray();

return tableBT;

請問春天大大可以說清楚一點嗎?
本篇文章回覆於2017-06-01 15:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

春天
檢舉此回應
你已經把1.2.3.都做完了,現在你有一個MemoryStream的實體ms 裡面存著你要的DataTable
接著參考分次傳輸的方式分段把Stream放到byte[] tableBT裡然後傳送不就好了

本篇文章回覆於2017-06-01 15:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

陳政傑
檢舉此回應
恩 不好意思 我C端跑不出來 一直出現錯誤訊息 在未達剖析之前已達資料流末端


不懂他的意思 我的資料表也沒顯示出來
本篇文章回覆於2017-06-01 16:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
最有價值解答

春天
檢舉此回應
連結
你研究研究自己解決吧
本篇文章回覆於2017-06-01 16:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
作者回應

陳政傑
檢舉此回應
好喔 感謝您的回復
本篇文章回覆於2017-06-01 17:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.