Разве мы не можем иметь переменные-члены в службах RIA? - PullRequest
1 голос
/ 18 марта 2011

Я создал простую службу RIA на моей стороне сервера и создал соответствующий контекст на клиенте.У меня есть несколько операций 2 [Invoke] в моих службах RIA.В первом вызове я вызываю первый метод и устанавливаю одну частную переменную уровня экземпляра.Однако, когда я вызываю второй метод, переменная больше не сохраняет значение.Это становится нулевым.Почему так происходит?У меня уже есть один и тот же DomainContext на клиенте для обоих вызовов методов, тогда почему это происходит?Запрещено ли иметь какую-либо переменную экземпляра в службе RIA?

Заранее спасибо:)

1 Ответ

2 голосов
/ 18 марта 2011

Вы не можете иметь закрытых членов в этом сценарии, потому что экземпляры вашего DomainContext между двумя вызовами на самом деле являются отдельными объектами. Каждый вызов выполняется атомарно, а серверная часть создает и очищает объект после использования.

Один из вариантов - перенести состояние ваших звонков с сервера на клиент. Пусть первый метод вернет в качестве конкретного класса модель, которая содержит частные значения, которые вы хотите отслеживать. Затем вы можете использовать эту модель в клиенте для вызова метода второго экземпляра. Если вы не хотите, чтобы эти данные передавались по проводам, это не очень хороший вариант.

Второй вариант - просто использовать объекты Session или Cache в ASP.NET, поскольку Silverlight работает в контексте ASP.NET. HttpContext.Current доступен для ваших услуг и связан с пользователем.

Другой вариант - просто объединить оба метода в один метод вызова.

...