Apache Ignite .Net Store ComplexType в сеансе - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу использовать apache ignite в качестве централизованного сервера сеансов. Моя проблема заключается в том, что ignite не может хранить объекты, которые не имеют сериализуемого атрибута. Например, мой объект подобен этому. Но он не может сериализовать объект Person из-за сущности PersonDetail. Кто-то может поделиться использовать .net образец ignite для использования сеанса без добавления каждого вложенного объекта сериализуемого атрибута.

[Serializable]
    public class Person
    {
        public string Name { get; set; }
        public int MyProperty2 { get; set; }

        public PersonDetail PDetail
        {
            get
            {
                return pDetail;
            }

            set
            {
                pDetail = value;
            }
        }

        private PersonDetail pDetail;

    }


    public class PersonDetail
    {

        private int Salary { get; set; }
        public int Age { get; set; }
    }

Мой веб-конфиг, как ...

 <sessionState mode="Custom" customProvider="IgniteSessionStateProvider">
          <providers>
            <add name="IgniteSessionStateProvider"
               type="Apache.Ignite.AspNet.IgniteSessionStateStoreProvider, Apache.Ignite.AspNet"
               igniteConfigurationSectionName="igniteConfiguration"
               applicationId="myUI"
               gridName="mysessiontest"
               cacheName="myWebCache" />
          </providers>
        </sessionState>

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Я думаю, у вас есть два варианта:

  1. Как отмечает Павел, вы можете выбрать другой способ сериализации всей вложенной структуры
  2. В качестве альтернативы вы можете выбрать не сериализовать вложенные объекты

У меня нет среды .net для тестирования, но теоретически это должно работать:

[Serializable]
public class MyObject 
{
  public int n1;
  [NonSerialized] public int n2;
  public String str;
}
0 голосов
/ 03 сентября 2018

Ignite.NET использует BinaryFormatter для сериализации данных состояния сеанса, поэтому отсюда вытекает требование иметь все вложенные классы [Serializable].

Обходного решения, связанного с Ignite, не существует. Вы можете сериализовать ваши данные с помощью другого сериализатора и перевести byte[] в состояние сеанса.

...