Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.40.53] |
|
Страницы: (3) [1] 2 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Сабж.
Пробовал так: 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 делать сериализацию поздно. А где тогда не поздно? |
Сообщ.
#2
,
|
|
|
GoldenJoe, не понятна суть вопроса, зачем и что ты пытаешься серилизовать
|
Сообщ.
#3
,
|
|
|
Pit-Bul, это не имеет никакого отношения к дело, но если надо, поясню: есть класс User, описывающий пользователя сервиса. Сериализовать надо List<User> - список пользователей. Причем сделать это надо по завершению работы службы (это происходит при закрытии консольного приложения, в котором хостится сервис).
Добавлено Пытаюсь выполнить сериализацию List<User> в методе Dispose, но экземпляр XmlSerializer к тому времени уже равен null (спасибо GC) |
Сообщ.
#4
,
|
|
|
а что мешает сделать эту самую сериализацию до вызова Dispose, то есть включить это в метод завершения работы сервиса ???
|
Сообщ.
#5
,
|
|
|
Цитата Pit-Bul @ метод завершения работы сервиса Это как? Мой сервис состоит целиком и полностью из [OperationContract]'ов. И Dispose. P.S. начал учить C# неделю назад. |
Сообщ.
#6
,
|
|
|
не уверен, не понятен контекст, но может сработать это
if (disposing) { serializer = new XmlSerializer(); serializer.Serialize([блаблабла]); } |
Сообщ.
#7
,
|
|
|
private XmlSerializer serializer; - этот использую еще и для ДЕсериализации. Второй создавать что-ли? (в методе Dispose)
|
Сообщ.
#8
,
|
|
|
ты пока просто попробуй
|
Сообщ.
#9
,
|
|
|
Pit-Bul, работает. Но Dispose вызывается каждый раз, когда отключается один из клиентов. Мне это не нужно, по этому ставлю InstanceContextMode=InstanceContextMode.Single (чтобы для каждого клиента не создавался отдельный экземпляр службы). Теперь Dispose вообще не вызывается, даже при закрытии окна консоли.
|
Сообщ.
#10
,
|
|
|
Никто не знает, почему Dispose сервиса не вызывается при завершении работы хоста? (если поставить InstanceContextMode=InstanceContextMode.Single)
|
Сообщ.
#11
,
|
|
|
Dispose подняться при InstanceContextMode.Single должен только при завершении сервиса...
По сути, как написано в MSDN, он может и поднимается, но мы этого уже не видим |
Сообщ.
#12
,
|
|
|
Цитата Spawn.NET @ Dispose подняться при InstanceContextMode.Single должен только при завершении сервиса... Что мне и нужно. Ставлю бряк на dispose - не срабатывает вообще, и при завершении сервиса не срабатывает. А при Single вроде и не должен. Значит, dispose - не вариант. Как же тогда отловить завершение работы сервиса? |
Сообщ.
#13
,
|
|
|
GoldenJoe, разве что при отключении последнего пользователя, ну или пользователя в принципе, коль уж одно соединение на всех.
|
Сообщ.
#14
,
|
|
|
Spawn.NET, после отключения каждого пользователя выполнять сериализацию списка пользователей... Ужас. Сервис будет грузить проц и жрать оперативу.
Добавлено Цитата Spawn.NET @ при отключении последнего пользователя Когда отключается пользователь, никак нельзя заранее знать, что он последний. |
Сообщ.
#15
,
|
|
|
GoldenJoe, и почему меня не оставляет ощущение что ты все таки что то не так делаешь, у тебя явно серьезное упущение в логике приложения раз ты пришел к таким проблемам.
|