2008-11-29 6 views
2

Извините, если это немного долго whinded ... подумайте:Почему я получаю 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, и все хорошо.

Я затем изменить клиентское приложение таким образом, что он создает свою собственную реализацию 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); 

Опять же, я исполню клиентское приложение на машине A, и все хорошо.

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

s.Execute(clientOptions); 

Вот краткое описание кода выполнения на машина B доступа обрабатать

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 был создан сервером, тогда это нормально, но если он создан клиентом, то это не так.

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

Thanks,

Carl.

+0

Я подозреваю, что Decker и Oisin находятся на правильном пути в отношении разрешений, поскольку на самом деле машина A выполняет код с машины B, но разрешения на доступ к набору для меня являются загадкой. – Carl

ответ

1

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

-Oisin

2

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

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

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

Обратите внимание, что я считаю, что это разрешения DEFAULT, и что вы можете захотеть найти зарегистрированное приложение COM + в списке приложений и установить права доступа к конкретному приложению, а не по умолчанию для машин. Но я знаю, что вы должны проверить, что Включить распределенный COM на этом компьютере.

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