散列Web服务响应的内容以检查差异

时间:2014-01-13 17:17:47

标签: c# web-services md5

我以这种方式调用SOAP Web服务:

WSStatus.WSClient ws = new WSStatus.WSClient();
I = ws.stats(ConfigurationManager.AppSettings["USR"], ConfigurationManager.AppSettings["PWD"], "aCode");

每次调用这个web服务时,它都会给我一个不同的输出,所以我需要检查输出是否与之前的调用相同。输出不是字符串所以我不能以简单的方式检查它,但我需要一些聪明的东西。有任何想法吗?

我会有类似MD5哈希的东西,所以我可以将它存储在数据库中供将来检查。

1 个答案:

答案 0 :(得分:0)

假设您正在返回一个普通对象,您可以尝试序列化字节数组上的响应,并使用MD5或SHA256生成对象哈希(根据Wikipedia检测到较少的冲突)。此代码可能对您有所帮助。

    public static string GetObjectHash<T>(this T foo)
    {
        byte[] serializedData = null;
        var hasher = SHA256.Create();
        var serializer = new DataContractSerializer(typeof(T));

        using (var stream = new MemoryStream())
        {
            serializer.WriteObject(stream, foo);
            serializedData = stream.ToArray();
        }

        serializedData = hasher.ComputeHash(serializedData);

        return String.Concat(serializedData.Select(d => d.ToString("x2")));
    }

我希望这有帮助!