我有一个Silverlight应用程序。这个应用程序回调一个Web服务(我已经写过)来获取客户列表。我正在尝试生成代表客户列表的哈希码。为了做到这一点,我在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。我提出这个问题是因为我相信这就是我的问题所在。
我的问题是,即使数据相同,我的哈希值在服务器端和客户端也不同。这是基于我在观察窗口看到的内容。我感觉它与结果从我的服务器传递到我的应用程序时发生的序列化有关。但是,我不知道如何解决这个问题。我需要数据的哈希值,但我无法弄清楚如何让它们排队。感谢您提供的任何帮助。