У меня настоящая проблема, и я надеюсь, что вы все можете мне помочь. Я постараюсь изо всех сил объяснить это, как я могу.. NET Remoting механизм блокировки резьбы
Я дополняю систему, использующую удаленную удаленную сеть .NET, чтобы разрешать вызовы базы данных с тонкого клиента на сервер, который выполняет указанные вызовы. На самом сервере есть установленные на нем компоненты доступа к данным, поэтому он делает фактические вызовы в базе данных и просто возвращает datarows тонкому клиенту.
Я только недавно добавил транзакции к этим модулям. Я хотел сделать это потокобезопасным, где, если клиентский поток A запустил транзакцию базы данных, клиентский поток B не сможет получить доступ к транзакции потока клиента A. Нет необходимости разрешать клиентскому потоку B иметь свою собственную транзакцию в то же время, только необходимо, чтобы я не разрешал клиентскому потоку B использовать транзакцию потока клиента А.
Существует только 1 ссылка на удаляемый объект, который они разделяют, и из-за базовой архитектуры, в которую я не попаду, я не могу это изменить. Все объекты Transaction хранятся на сервере в этом удаленном объекте.
Я не вижу никакого хорошего способа сделать это, кроме того, возможно, передавая информацию о потоках клиентов вместе с каждым вызовом транзакции, что невозможно для моих срочных сроков. :-(Возможно, если удаленный объект мог получить доступ к потоку вызывающего клиента, тогда мне не пришлось бы передавать информацию о потоке с каждым вызовом, делая это возможным.
Если бы был какой-то способ связывания клиентского потока с удаленным доступом процесс нить, я думаю, что будет делать трюк, но нет никакой документации, что я мог бы найти на такую вещь.
Я надеюсь, что я объяснил это достаточно хорошо. Вся помощь очень ценится. Спасибо заранее.
Благодарим вас за это предложение. Я не знал о CallContext, и это могло мне очень помочь. Я просто не знаю, как я могу гарантировать, что информация о потоке всегда будет передана. Кажется, что мне нужно будет убедиться, что контекст потока задан для каждого вызывающего потока, который может быть неосуществимым с моими временными рамками. Есть ли какое-то событие, которое запускается перед удаленным вызовом, в котором я могу установить callcontext для этого потока? Или callcontext сохраняет ссылку на информацию о потоке по умолчанию? Это было бы большой помощью для меня! Спасибо. – jnadro52
@ jnadro52: Я полагаю, что перед выполнением удаленного вызова задайте контекст вызова с идентификатором на стороне клиента, а затем на стороне сервера, в функции, которая является удаленным вызовом клиента, сначала прочитайте контекст callcontext и создайте коллекцию , таким образом вы бы знали, какой клиент использует поток. Единственное, что коллекция должна быть потокобезопасной .... – t0mm13b