В доступе отказано - межпроцессный интерфейс с использованием .NET Remoting и FrameworkElementAdapters - PullRequest
1 голос
/ 29 сентября 2010

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

Проблема должна быть довольно очевидной.Я хочу передавать элементы WPF между процессами для подключаемой инфраструктуры приложений без необходимости использования Managed AddIn Framework.Я развертываю в среде, где кэширование файлов на диск вне моего контроля недопустимо из-за крайне ограниченных разрешений.Это обходные пути - помещение корня надстройки в appdata - но принудительная структура каталогов нежелательна, и, насколько мне известно, это не то, для чего эта папка.

Метод исключения следующий, за исключениемстроки, выделенные полужирным шрифтом:

delegate void AddUIElementDelegate(Client client, System.AddIn.Contract.INativeHandleContract handle);
        private void AddUIElement(Client client, System.AddIn.Contract.INativeHandleContract handle)
        {
            if (this.Dispatcher.CheckAccess())
            {
                var element = System.AddIn.Pipeline.FrameworkElementAdapters.ContractToViewAdapter(handle);
                m_UIElements[client] = element;
                StackPanel_PluginUIHost.Children.Add(m_UIElements[client]);
            }
            else
            {
                this.Dispatcher.BeginInvoke(new AddUIElementDelegate(AddUIElement), client, handle);
            }
        }

Эксперименты, казалось, требовали, чтобы дескриптор был не маршалирован через FrameworkElementAdapters.ContractToViewAdapter () в потоке STA, следовательно, вызывается.Следует отметить, что client является обратным вызовом MarshalByRefObject и доступен в этом методе через прокси. handle также был создан удаленно с вызовом FrameworkElementAdapters.ViewToContractAdapter () и передан в этот домен приложения в качестве возвращаемого значения удаленного метода.

Исключение Irecieve is Произошло RemotingException - Отказано в доступе: невозможно удаленно вызывать непубличные или статические методы.

Любые отзывы приветствуются.

1 Ответ

0 голосов
/ 29 сентября 2010

Сообщение, которое вы получаете, включает вероятность того, что вы вызываете невидимый метод. Проверка приватности другой сборки (... которая звучит неправильно) не является "безопасной для типов" операцией, а выполнение операций, не являющихся безопасными для типов, требует от вашей сборки самого высокого доверия, которое может дать CLR: SkipVerification. Мало того, что CLR не будет проверять разрешения для обычных задач «песочницы», он будет выводить ваш код из песочницы без присмотра, и если копы ОС закроют вас за нарушение правил, это ваша проблема. Поскольку вы упомянули, что код выполняется в строго ограниченном пространстве разрешений, я сомневаюсь, что это вариант.

Возможно, вам следует проверить проверки, которые выполняет Dispatcher.CheckAccess (). Похоже, вы получаете ложный положительный отзыв о вашей способности работать с делегатом обратного вызова.

...