У меня острая проблема, и я надеюсь, что вы все можете мне помочь. Я приложу все усилия, чтобы объяснить это так хорошо, как смогу.
Я дополняю систему, в которой используется удаленное взаимодействие .NET, чтобы разрешить вызовы из базы данных с тонкого клиента на сервер, который выполняет указанные вызовы. На самом сервере установлены компоненты доступа к данным, поэтому он выполняет фактические вызовы базы данных и просто возвращает данные для тонкого клиента.
Я недавно добавил транзакции в эти модули. Я хотел сделать этот потокобезопасным, когда клиентский поток A запускает транзакцию базы данных, клиентский поток B не сможет получить доступ к транзакции клиентского потока A. В то же время нет необходимости разрешать клиентскому потоку B иметь собственную транзакцию, необходимо только, чтобы я не позволял клиентскому потоку B использовать транзакцию клиентского потока A.
Существует только одна ссылка на удаленный объект, который они оба разделяют, и из-за базовой архитектуры, в которую я не буду входить, я не могу изменить это. Все объекты транзакций хранятся на сервере в этом удаленном объекте.
Я не вижу хорошего способа сделать это, кроме, возможно, передачи информации о клиентском потоке вместе с каждым вызовом транзакции, что невозможно при моих срочных графиках. :-( Возможно, если удаленный объект сможет получить доступ к вызывающему клиентскому потоку, тогда мне не придется передавать информацию о потоках при каждом вызове, делая это возможным.
Если бы был какой-то способ связать поток клиента с потоком процесса удаленного взаимодействия, я думаю, что это бы сработало, но нет документации, которую я мог бы найти по этому поводу.
Надеюсь, я объяснил это достаточно хорошо. Вся помощь очень ценится. Заранее спасибо.