Почему я получаю E_ACCESSDENIED при вызове метода COM + из прокси?

Извините, если это немного долго насмехается ... подумайте об этом:

У меня есть приложение COM + в пространстве имен Компания, которое предоставляет объект с именем Сервер, который имеет следующие методы:

bool Server.Execute(IOptions options)

IOptions Server.CreateOptions()

IOptions просто имеет несколько логических свойств чтения / записи, а именно:

IOptions.Option1 (bool)

IOptions.Option2 (bool)

Я создаю клиентское приложение со следующим кодом:

Company.Server s = new Company.Server();

Company.IOptions serverOptions = s.CreateOptions();

serverOptions.Option1 = false;
serverOptions.Option2 = true;

s.Execute(serverOptions);

Я устанавливаю приложение COM + на машину A, а затем запускаю клиента на машине A, и все в порядке.

Затем я модифицирую клиентское приложение, чтобы оно создавало собственную реализацию IOptions следующим образом:

public class ClientOptions : Company.IOptions
{
    public bool Option1 { get; set; }
    public bool Option2 { get; set; }
}

Company.Server s = new Company.Server();

ClientOptions clientOptions = new ClientOptions();

clientOptions.Option1 = false;
clientOptions.Option2 = true;

s.Execute(clientOptions);

Я снова запускаю клиентское приложение на машине А, и все в порядке.

Если я устанавливаю приложение COM + на машину B в качестве прокси для машины A, а затем выполняю клиент, я получаю ошибку E_ACCESSDENIED при вызове:

s.Execute(clientOptions);

Вот краткое изложение кода, выполняемого на машине B, обращающейся к машине A

Company.Server s = new Company.Server();

Company.Options serverOptions = s.CreateOptions()

serverOptions.Option1 = false;
serverOptions.Option2 = true;

s.Execute(serverOptions); // this is fine

ClientOptions clientOptions = new ClientOptions();

clientOptions.Option1 = false;
clientOptions.Option2 = true;

s.Execute(clientOptions); // this causes the error

Подводя итог, почему я могу реализовать свои собственные IOptions и использовать их в приложении COM +, когда клиент находится на том же компьютере, что и приложение COM +, но не когда клиент обращается к приложению COM + через прокси на другом компьютере?

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

Любая помощь будет принята с благодарностью.

Спасибо,

Карл.

Я подозреваю, что Декер и Ойсин находятся на правильном пути в отношении разрешений, поскольку фактически машина A выполняет код с машины B, но какие права доступа установить для меня - загадка.

Carl 30.11.2008 16:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
2 292
2

Ответы 2

Попробуйте посмотреть разрешения удаленной активации COM-сервера на удаленном компьютере через dcomcnfg.exe (должен открыться MMC snapin).

-Oisin

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

В более старых ОС (Windows 2000) вы должны запустить dcomcnfg. Но в XP вы запускаете службы компонентов из Панели управления - Администрирование. Под Vista, видимо, придется запускать windows \ System32 \ comexp.msc.

Когда вы находитесь в администрировании служб компонентов, выделите «Мой компьютер» и выберите свойства. Первое, что вам нужно сделать, это на вкладке Свойства по умолчанию нажать Включить распределенный COM на этом компьютере. Кроме того, вам может потребоваться указать разрешения Запустить и активировать и Доступ на вкладке COM Безопасность. При этом вам, возможно, придется иметь дело как с Edit Limits, так и с Edit Defaults?

Обратите внимание: я считаю, что это разрешения ПО УМОЛЧАНИЮ и что вы можете найти свое зарегистрированное приложение COM + в списке приложений и установить права доступа для конкретного приложения, а не значения по умолчанию для всей машины. Но я знаю, что вы должны установить этот флажок Включить распределенный COM на этом компьютере.

Надеюсь, это поможет.

Другие вопросы по теме