.net remoting: обновление уже сериализованных объектов - PullRequest
6 голосов
/ 06 мая 2011

Я получил MarshalByRefObject с именем «DefaultMeasurement», который содержит список объектов IPoint.

public class DefaultMeasurement : MarshalByRefObject, IMeasurement
{
  private List<IPoint> iPoints;
  public this[int aIndex]
  {
    get { return iPoints[aIndex];}
  }
}

[Serializable]
public class DefaultPoint : IPoint, ISerializable
{
  public int Value {get;set;}
}

При первом получении объекта DefaultMeasurement с сервера все точки сериализуются, и при всех последующих вызовах DefaultMeasurement.Points я получаю список, который был корректным при запуске моего клиента. Но тем временем состояние хотя бы одного объекта в этом списке могло измениться, и я не могу получить это текущее состояние, хотя на сервере это состояние обновляется. Как мне принудительно обновить этот список?

дальнейшее уточнение:
- это будет работать, как только я сделаю DefaultPoint : MarshalByRefObject, но это не вариант, поскольку это отрицательно влияет на производительность
- под «обновлением» я подразумеваю изменения в существующих объектах на сервере, без добавления / удаления в самом списке
- У меня может быть до 80k DefaultPoint объектов

Ответы [ 2 ]

3 голосов
/ 12 мая 2011

Поскольку вы не хотите, чтобы сама точка представляла собой MarshalByRef (поскольку при вводе значительного количества точек вводится много трафика), я бы порекомендовал вам иметь явные методы, которые синхронизируют значения точек. После внесения значительного количества изменений на сервере вы вызываете метод SynchronizePoints (), который включает новые значения для всех точек. Теперь прокси на стороне клиента имеет обновленное состояние. А еще лучше, во-первых, удалить состояние из объекта (поскольку оно не является прямым отражением состояния сервера) и вместо этого использовать объекты на стороне клиента, которые создаются по мере необходимости при сборе точек с сервера.

0 голосов
/ 12 мая 2011

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

Уведомление может передать идентификатор объектов, которые изменились, или клиент может запроситьсписок измененных объектов.

...