奇妙な状況が発生しています。次のコードを使用して、小さなファイルの MD5 ハッシュを作成しています。サーバー側のハッシュとクライアント側のハッシュを比較することで、更新されたコピーをダウンロードできるように変更されているかどうかをテストできます。
Public Function MD5Hash(mFileInfo As FileInfo) As String
Dim returnString As String = ""
Try
Dim f As FileStream = New FileStream(mFileInfo.FullName, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
Dim md5 As New System.Security.Cryptography.MD5CryptoServiceProvider()
md5.ComputeHash(f)
returnString = GenerateHash(System.Text.Encoding.UTF8.GetString(md5.Hash))
f.Close()
Catch
'File doesn't exist
End Try
Return returnString
End Function
Public Shared Function GenerateHash(ByVal SourceText As String) As String
'Create an encoding object to ensure the encoding standard for the source text
Dim Ue As New UnicodeEncoding()
'Retrieve a byte array based on the source text
Dim ByteSourceText() As Byte = Ue.GetBytes(SourceText)
'Instantiate an MD5 Provider object
Dim Md5 As New MD5CryptoServiceProvider()
'Compute the hash value from the source
Dim ByteHash() As Byte = Md5.ComputeHash(ByteSourceText)
'And convert it to String format for return
Return Convert.ToBase64String(ByteHash)
End Function
問題は、ファイルが同一であっても、サーバー側で 1 つのハッシュを取得し、クライアント側で別のハッシュを取得することです。クライアントは常に .NET2.0 を使用する WinXP 32 ビットであり、サーバーは .NET4.0 を使用する Win2008 64 ビットです。
ダウンロード プロセスでファイルが変更されていないことを確認するために、サーバーでファイルを圧縮してクライアントで抽出しようとしましたが、それでも同じハッシュの不一致が発生します。