Контекст удаленного вызова .Net - PullRequest
1 голос
/ 20 января 2012

У меня есть две службы, работающие в одном и том же процессе и размещающие одни и те же классы на разных IP-портах.

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

Возможно ли получить некоторую информацию о владельце в конструкторе моих классов, которые являются MarshalByRefObjects?

Ссылка на Service, TcpCannel или некоторые произвольные значения.Что-нибудь подойдет, я в отчаянии.

Разъяснение (надеюсь): в моем Main () у меня есть

ServicesToRun = new ServiceBase[] { 
new BatchServer("ServerA"),
new BatchServer("ServerB")};

, а в ExecuteService () в моей реализации ServiceBase у меня есть:

RemotingConfiguration.RegisterWellKnownServiceType(
   typeof(RmtObject), "RmtObject",
   WellKnownObjectMode.Singleton);

на стороне клиента я создаю объект следующим образом:

(RmtObject)Activator.GetObject(typeof(RmtObject), theURI, WellKnownObjectMode.Singleton);

Когда метод, который я выполняю на RmtObject, мне нужно знать, в RmtObject, принадлежит ли он ServerA или ServerB.

Я мог бы вместо этого использовать WellKnownObjectMode.SingleCall, если это облегчает задачу.

1 Ответ

0 голосов
/ 25 января 2012

Я решил эту проблему, реализовав свой собственный SinkProvider, очень похожий на тот, который получил наибольшее количество голосов: Идентификация клиента во время вызова удаленного взаимодействия .NET .

...