Вопрос по Remoting
От: Jurnio  
Дата: 21.06.08 13:03
Оценка:
Есть класс обозначенный как Wellknown Singleton
public class Service : MarshalByRefObject, IRService
    {
        public Service()
        {
        }


        public Query CreateQuery(object Params)
        {
            ....
            return new Query(SomeParams);
        }
        
    }


Как видно метод CreateQuery выдает объект класса Query:

public class Query : MarshalByRefObject
    {
        public Query(object SomeParams)
        {
            .....
        }
        public IList GetPage(int PageSize, int PageNumber)
        {
          ....
          return Result;
        }
    }


Это класс в настройках Remoting вообще никак не обозначен.
Вот у меня вопрос: Какое поведение у этого класса? CAO, SAO (Singleton, SingleCall)
Спасибо.
Re: Вопрос по Remoting
От: arkhivania  
Дата: 21.06.08 18:28
Оценка:
Здравствуйте, Jurnio, Вы писали:
J>Это класс в настройках Remoting вообще никак не обозначен.
J>Вот у меня вопрос: Какое поведение у этого класса? CAO, SAO (Singleton, SingleCall)
J>Спасибо.

Ни singleton, ни singlecall — этот объект будет некоторое время жить на стороне сервера пока его не соберет GC и все вызовы по той ссылке который возвращает ваш метод будут направляться именно этому экземпляру класса. Чтобы прописать его политику жизни необходимо перегрузить у него метод InitializeLifetimeServices (см. msdn) или на стороне клиента повесить на него спонсора (советую не делать свой ISponsor а взять ClientSponsor) чтобы объект жил пока ваш клиент жив (правда это лучше использовать только с IPC)
Re[2]: Вопрос по Remoting
От: Jurnio  
Дата: 23.06.08 05:39
Оценка:
Здравствуйте, arkhivania, Вы писали:


A>Ни singleton, ни singlecall — этот объект будет некоторое время жить на стороне сервера пока его не соберет GC и все вызовы по той ссылке который возвращает ваш метод будут направляться именно этому экземпляру класса. Чтобы прописать его политику жизни необходимо перегрузить у него метод InitializeLifetimeServices (см. msdn) или на стороне клиента повесить на него спонсора (советую не делать свой ISponsor а взять ClientSponsor) чтобы объект жил пока ваш клиент жив (правда это лучше использовать только с IPC)


Спасибо за ответ. Еще пару вопросов:
Допустим я отключу объект от спонсора, когда мне объект уже не будет нужен. Я понимаю, что удерживаю в такой схеме ресурсы сервера.
Какие еще проблемы могут возникнуть при использовании HTTP или TCP?
Еще раз спасибо.
Re[3]: Вопрос по Remoting
От: arkhivania  
Дата: 23.06.08 05:56
Оценка:
Здравствуйте, Jurnio, Вы писали:

J>Допустим я отключу объект от спонсора, когда мне объект уже не будет нужен. Я понимаю, что удерживаю в такой схеме ресурсы сервера.


Здесь нужно почитать про InitializeLifetimeServices — по идее вы будете удерживать ресурсы сервера только если вернете null или уж больно большое время умирания объекта на сервере. (ну и конечно если сервер сам держит ссылки на ваши объекты)

J>Какие еще проблемы могут возникнуть при использовании HTTP или TCP?


в основном проблемы с настройками канала и методов аутоиндентификации, но на форуме и в интернете много рецептов как все проблемы обходить.

J>Еще раз спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.