我有一个 Silverlight 应用程序。这个应用程序回调一个网络服务(我已经写过)来获取客户列表。我正在尝试生成一个代表客户列表的哈希码。为了做到这一点,我在我的 Silverlight 应用程序和服务器端代码中编写了以下代码:
public static string GetHashCode<T>(T data)
{
SHA256Managed crypto = new SHA256Managed();
try
{
// Serialize the object
byte[] serializedBytes;
using (var memoryStream = new MemoryStream())
{
var serializer = new DataContractSerializer(typeof(T));
serializer.WriteObject(memoryStream, data);
memoryStream.Seek(0, SeekOrigin.Begin);
serializedBytes = memoryStream.ToArray();
}
byte[] hashed = crypto.ComputeHash(serializedBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashed.Length; i++)
sb.Append(hashed[i].ToString("X2"));
return sb.ToString();
}
catch (Exception)
{
return string.Empty;
}
}
我在服务器端的方法如下所示:
[OperationContract]
public List<Customer> GetCustomers()
{
List<Customer> customers = Customer.GetAll();
string hash = GetHashCode<List<Customer>>(customers);
return customers;
}
在客户端,在我的 Silverlight 应用程序中,我的 GetCustomersCompleted 事件处理程序中有以下内容:
string hash = GetHashCode<List<Customer>>(e.Result.ToList());
请注意,我首先将事件处理程序 Result 转换为列表。原因是因为Result实际上是一个ObservableCollection。我提出这个是因为我相信这就是我的问题所在。
我的问题是,即使数据相同,我的哈希值在服务器端和客户端也是不同的。这是基于我在监视窗口中看到的。我感觉它与结果从我的服务器传递到我的应用程序时发生的序列化有关。但是,我不确定如何解决这个问题。我需要数据的哈希值,但我不知道如何让它们对齐。感谢您提供任何帮助。