2013-12-16 104 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