2013-12-16 184 views
0

在WCF中使用流式傳輸請求傳輸大型文件時,如何確保客戶端已收到數據。我的意思是我如何確保可靠的數據傳輸並獲得承認。使用WCF流式傳輸數據

回答

0

我不確定我是否正確。但是,如果我這樣做,那麼:

http://www.dotnetcurry.com/showarticle.aspx?ID=721

如果不是請更具體的時候,什麼樣resposne從服務您所期待

+0

讓我在我的要求詳細的解釋:我需要通過WCF服務將數據傳輸到客戶端。數據可以傳輸1MB到1GB的大小。 那麼,我可以做什麼,我可以從數據庫中提取數據並通過WCF服務提供給客戶端。客戶端然後可以將其添加到其本地數據庫中。我如何管理傳輸大數據?如果在轉移過程中失敗,我希望能夠恢復流程。如何知道客戶端本地數據庫是否已更新?我應該使用WCF流嗎? 謝謝。 – user3074683

+0

我不確定流式傳輸是否適合您,因爲它對綁定有限制,並且您的要求是繼續傳輸數據,所以最好是以塊爲單位發送數據。 –

+0

您也可以事先複製或鎖定它,以確保在傳輸過程中不會發生變化。 –

0

你可以嘗試之前創建的數據的校驗和發送它,然後在收到數據後,您可以再次計算校驗和並確認它是正確的。

0

我們所做的是我們在發送字節數組之前計算一個MD5散列,然後將該字節數據包的文本值發送給主機,主機然後計算另一個MD5散列(再次根據字節數)以及在期望的MD5哈希(由客戶端發送)與主機上新計算的哈希之間進行比較。如果他們不一樣,你就知道你沒有得到完整的文件,迫使你在回覆中發回錯誤。

下面是我們用來calc下哈希小函數的例子:

Protected Function GetMD5HashFromBuffer(ByVal oBuffer As Byte()) As String 
    Dim md5 As System.Security.Cryptography.MD5 = New MD5CryptoServiceProvider 
    Dim retVal() As Byte = md5.ComputeHash(oBuffer) 
    'fileSize = file.Length 
    'file.Close() 
    Dim sb As StringBuilder = New StringBuilder 
    Dim i As Integer = 0 
    Do While (i < retVal.Length) 
    sb.Append(retVal(i).ToString("x2")) 
    i = (i + 1) 
    Loop 
    Return sb.ToString 
End Function