Передача делегата с использованием удаленного взаимодействия без передачи сборки реализации - PullRequest
2 голосов
/ 07 июня 2011

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

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

Моя проблема в том, что когда я передаю делегат на сервер, серверу требуется сборка, для которой объявляется тело делегата (одна из сборок клиента). Наша программная архитектура запрещает загрузку клиентской сборки. Когда я думаю об этом, я должен быть в состоянии передать IL, который определяет делегата, на сервер, создать делегат с помощью dyanmicMethod и выполнить его. Если это так, то почему .net требует сборки, даже если тело делегата содержит простые типы? Есть ли способ удаленной сборки без необходимости сборки, в которой объявлено тело?

PS: причина, по которой я хочу, - это производительность. Делегат инкапсулирует несколько вызовов на сервер. Я не могу изменить серверные API и т. Д. Для этого.

Спасибо за любую информацию

1 Ответ

1 голос
/ 15 июня 2011

Я не думаю, что вы можете сделать это.

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

Существует обсуждение того, как обойти это, по этой ссылке . Я не знаю, сможете ли вы реорганизовать ваш код, чтобы он соответствовал этому шаблону.

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

...