2008-08-21 6 views
5

Estoy trabajando en una aplicación DCOM con el servidor y el cliente en dos máquinas, ambas ejecutando WinXP con Service Pack 2. En ambas máquinas, estoy conectado con el mismo nombre de usuario y contraseña.DCOM: CoCreateInstanceEx devuelve E_ACCESSDENIED

Cuando el cliente en una máquina llama a CoCreateInstanceEx y le pide a la otra máquina que inicie la aplicación de servidor, devuelve E_ACCESSDENIED.

Intenté entrar en las propiedades de los componentes de la aplicación del servidor en dcomcnfg y dar permisos completos a todos para todo, pero eso no ayudó.

¿Qué debo hacer para permitir que esta llamada tenga éxito?

Actualización: Cuando la aplicación de servidor se ejecuta en un cuadro de Windows 2000, no obtengo este error; CoCreateInstanceEx devuelve S_OK.

Respuesta

1

tres cosas a comprobar:

1) Volver a DCOMCnfg y hacer que tratar de asegurarse de que no sólo la seguridad de acceso, sino también la sección de "permisos de inicio" contiene los usuarios o grupos de seguridad apropiado.

2) Asegúrese de que el nivel de autenticación se establece en otra cosa que no sea "Ninguno"

3) Compruebe también que la ubicación en el disco que el componente se encuentra es en realidad accesible a la cuenta configurada en los permisos de seguridad configura.

EDIT:

Uno más: ¿Está llamando CoInitialiseSecurity() primero también? Eso suena una campana!

Edit2:

Sobre la base de su cambio: Intenta dejar caer los cortafuegos por completo en ambas máquinas XP y ver si eso hace la diferencia. Es posible que deba dejar que DCOM lo haga explícitamente.

2

Derecha, entonces si su nivel de Autenticación está configurado en Predeterminado. ¿Cuál es el nivel de autenticación establecido en la Configuración predeterminada? Solo por interés. (Aunque el hecho de que funciona a una caja de 2000, probablemente hace que redundante)

EDIT:

también: Creo recordar haciendo un montón de reiniciar cuando solía jugar/trabajar con DCOM así que tal vez una rápida reiniciar ambas máquinas cuando esté satisfecho con la configuración de dcomcnfg tampoco funcionará.

+0

[@Shaun Austin II:] (http://stackoverflow.com/questions/20841#20930) El nivel de autenticación predeterminado global se establece en Conectar, y el Nivel de personificación predeterminado se establece en Identificar. ** Actualización: ** ... e intenté reiniciar, y el problema persiste. Gracias por todos sus consejos, pero aún me falta algo. –

0

¿Cuál es el sabor de su caja de Windows 2000, por cierto? Professional, Server, servidor de Adv ...

Además, ¿hay una diferencia entre la pertenencia al dominio entre los dos (uno en un dominio, el otro no, diferentes dominios, etc ...?)

Uno más Lo que sucede es que los errores de DCOM aparecerán en el registro de eventos del sistema a veces, especialmente para la creación de objetos. ¿Revisaste allí las pistas?

0

Tuve exactamente el mismo problema. El problema ocurre en máquinas que tienen XP SP2 + OS o más reciente.

Lo resuelto usando los siguientes pasos:

  1. Compruebe que ambos equipos cliente y servidor están en el mismo dominio.

  2. Debe usar el mismo usuario en ambas computadoras o, si desea utilizar diferentes usuarios en el cliente y el servidor, debe asegurarse de que tanto el cliente como el servidor tengan privilegios en ambas computadoras (en particular, haga asegurarse de que son miembros del grupo de usuarios Distributed COM.

  3. servicios componenete abierta MMC (ejecutar dcomcnfg).

  4. Ir a Mi PC-> Propiedades-> Propiedades predeterminadas y asegúrese de que por defecto es Impersenation Nivel " Identificar "

  5. Vaya a la pestaña Seguridad COM, en Permisos de acceso y Permisos de inicio y activación vaya a Editar límites y agregue permisos de acceso local y remoto a los usuarios de clientes y servidores de su aplicación COM

  6. Asegúrese de tener un excepción de firewall en el puerto 135 para su aplicación ...

Espero que esto lo ayude!

2

Si los equipos no son ambos miembros del mismo dominio, también debe otorgar permisos de acceso & a "INICIO ANÓNIMO". "Todos" no incluye esto.

+0

Esto hizo el truco para mí. – fakeleft

Cuestiones relacionadas