Как создать хеш-код в C # на графе объектов, предоставляемых службой WCF - PullRequest
3 голосов
/ 04 октября 2010

В настоящее время у меня есть служба WCF, которая предоставляет граф объектов данных по запросу.Я хочу иметь механизм, в котором клиент может вычислить хеш на кэшированном графе объектов, которым он обладает, и затем может передать это значение хеш-функции в службу WCF, чтобы проверить, соответствует ли оно данным, которыми обладает служба.

Я пыталсяпри этом используется стандартный криптографический алгоритм для вычисления хеша на объектах, но поскольку определения объектов хранятся службой, когда это передается клиенту, могут быть добавлены дополнительные свойства, и порядок свойств может измениться, оба из которых будут влиятьпроизведенный хэш.

Существует ли какой-либо механизм, кроме, скажем, переопределения GetHashCode для каждого объекта в определении службы WCF, а затем повторной реализации генерации хеша того же типа, что и в утилите на клиенте?

Ответы [ 2 ]

2 голосов
/ 04 октября 2010

Вы можете просто сериализовать его в известную компоновку и взять известный хеш (md5?) Сериализованной формы.Это требует предсказуемой сериализации, поэтому атрибуты XML будут такой же проблемой, как и пробелы.Но не непреодолимый.

В качестве альтернативы подход, основанный на отражении / md5?

1 голос
/ 05 октября 2010

удалось разобраться с этим сейчас.Вместо того чтобы использовать XMLSerialiser на клиенте и сервере для создания потока памяти, для которого я мог бы затем вычислить хеш, я изменил его, чтобы использовать DataContractSerializer, который используется службой WCF для сериализации графа объектов для клиента.Это означает, что графы объектов имеют одинаковую структуру и структуру.Вычисление хэша в обеих сериализованных формах теперь совпадает.

На всякий случай, если кому-то интересно, как это работает, я вызываю его, а затем сравниваю возвращенный байт [] с предоставленным клиентом:1004 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...