На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> Сериализация класса по завершению работы WCF-службы
    Сабж.
    Пробовал так:
    ExpandedWrap disabled
      public class Service : IService, IDisposable
      {
          private XmlSerializer serializer;
       
          //...
       
          public void Dispose()
          {
              Dispose(true);
              GC.SuppressFinalize(this);
          }
       
          private void Dispose(bool disposing)
          {
              if (disposing)
                  serializer.Serialize([блаблабла]);
          }
      }

    Но к тому времени, когда вызывается Dispose, XmlSerializer serializer уже "дохлый" (null). Т.е. в методе Dispose делать сериализацию поздно. А где тогда не поздно?
      GoldenJoe, не понятна суть вопроса, зачем и что ты пытаешься серилизовать
        Pit-Bul, это не имеет никакого отношения к дело, но если надо, поясню: есть класс User, описывающий пользователя сервиса. Сериализовать надо List<User> - список пользователей. Причем сделать это надо по завершению работы службы (это происходит при закрытии консольного приложения, в котором хостится сервис).

        Добавлено
        Пытаюсь выполнить сериализацию List<User> в методе Dispose, но экземпляр XmlSerializer к тому времени уже равен null (спасибо GC)
          а что мешает сделать эту самую сериализацию до вызова Dispose, то есть включить это в метод завершения работы сервиса ???
            Цитата Pit-Bul @
            метод завершения работы сервиса

            Это как? Мой сервис состоит целиком и полностью из [OperationContract]'ов. И Dispose.

            P.S. начал учить C# неделю назад.
              не уверен, не понятен контекст, но может сработать это

              ExpandedWrap disabled
                if (disposing)
                {
                  serializer = new XmlSerializer();            
                  serializer.Serialize([блаблабла]);
                }
                private XmlSerializer serializer; - этот использую еще и для ДЕсериализации. Второй создавать что-ли? (в методе Dispose)
                  ты пока просто попробуй
                    Pit-Bul, работает. Но Dispose вызывается каждый раз, когда отключается один из клиентов. Мне это не нужно, по этому ставлю InstanceContextMode=InstanceContextMode.Single (чтобы для каждого клиента не создавался отдельный экземпляр службы). Теперь Dispose вообще не вызывается, даже при закрытии окна консоли.
                      Никто не знает, почему Dispose сервиса не вызывается при завершении работы хоста? (если поставить InstanceContextMode=InstanceContextMode.Single)
                        Dispose подняться при InstanceContextMode.Single должен только при завершении сервиса...
                        По сути, как написано в MSDN, он может и поднимается, но мы этого уже не видим :)
                        Сообщение отредактировано: Spawn.NET -
                          Цитата Spawn.NET @
                          Dispose подняться при InstanceContextMode.Single должен только при завершении сервиса...

                          Что мне и нужно. Ставлю бряк на dispose - не срабатывает вообще, и при завершении сервиса не срабатывает. А при Single вроде и не должен. Значит, dispose - не вариант. Как же тогда отловить завершение работы сервиса?
                            GoldenJoe, разве что при отключении последнего пользователя, ну или пользователя в принципе, коль уж одно соединение на всех.
                              Spawn.NET, после отключения каждого пользователя выполнять сериализацию списка пользователей... Ужас. Сервис будет грузить проц и жрать оперативу.

                              Добавлено
                              Цитата Spawn.NET @
                              при отключении последнего пользователя

                              Когда отключается пользователь, никак нельзя заранее знать, что он последний.
                                GoldenJoe, и почему меня не оставляет ощущение что ты все таки что то не так делаешь, у тебя явно серьезное упущение в логике приложения раз ты пришел к таким проблемам.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0403 ]   [ 16 queries used ]   [ Generated: 4.05.24, 15:25 GMT ]