Как ограничить область видимости именованных слотов LogicalCallContext?
От: LWhisper  
Дата: 01.03.17 11:06
Оценка:
Всем привет.

Возникла проблема при использовании LogicalCallContext в связки с .NET Remoting.
Эта гадость пытается сериализовать данные в именованных слотах и передать на удалённую сторону.
А там далеко не всегда находятся объекты, которые должны и могут сериализоваться.

Одним из варианов решения проблемы является выполнение Remoting-вызовов в отдельном потоке, предварительно огороженным
ExecutionContext.SuppressFlow / RestoreFlow, это мне не подходит.

Другим — очистка LogicalCallContext от именованных данных перед сериализацией сообщения.
Но помимо ремотинга, возникает необходимость ещё и восстановить их обратно после того, как будет получен ответ, в противном случае уже контекст потока будет перезатёрт контекстом с удалённого сервера (тобишь пустым).

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

Для организации ремотинга используется кастомный IClientFormatterSink.
Подскажите — как быть в такой ситуации? Пока наиболее правильным кажется второй вариант, но уж очень по походит на танцы на граблях...
c# remoting .net callcontext
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.