Частичная потеря данных в модели Service Fabric

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

У нас было недавнее обновление кода, которое изменило пространство имен и сборку одной из моделей, которые хранились в словаре, однако сам контракт данных не изменился.

До:

namespace MainProject.StatefulService.Models
{
   [DataContract]
   public class ColorElement
   {
      [DataMember(Name = "Color")]
      private readonly Color color;

      // Shortened for clarity.
   }
}

После:

namespace MainProject.Models
{
   [DataContract]
   public class ColorElement
   {
      [DataMember(Name = "Color")]
      private readonly Color color;

      // Shortened for clarity.
   }
}

Есть ли способ, которым изменение сборки / пространства имен модели может вызвать проблемы в надежном словаре?


person Sam Schneider    schedule 30.03.2018    source источник


Ответы (1)


Как описано здесь: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-application-upgrade-data-serialization

Изменение имени класса или пространства имен повлияет на ваш формат сериализации.

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

person Esben Bach    schedule 01.04.2018
comment
Забыл добавить, что если вам нужно как-то изменить формат, вам, вероятно, следует подключиться к обратным вызовам сериализации, как описано здесь: docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/ и здесь docs.microsoft.com/en-us/dotnet/framework / wcf / feature-details / - person Esben Bach; 01.04.2018
comment
Я прочитал опубликованную вами документацию по Service Fabric, но, перечитывая, теперь вижу, что в ней четко указано изменение имени класса или пространства имен как одно из изменений кода, которые приводят к изменению формата данных. - person Sam Schneider; 02.04.2018