PDA

Ver la Versión Completa : TSocketConnection y error "Interface not supported"


Aldo
21-02-2008, 10:42:11
Hola a todos.

Os pongo en antecedentes. Es primera vez que estoy haciendo una aplicación en tres capas y me he decidido por probar a hacerlo con TSocketConnection en vez de con TDCOMConnection para evitar en el futuro los problemas típicos de seguridad en la red y temas relacionados con Cortafuegos, etc.

Estoy haciendo esta aplicación en Delphi 5 y tengo en la capa intermedia un Servidor TRemoteDataModule que tiene un método que se llama Connect con varios parámetros su declaración es la siguiente:
function Connect(const szUserName, szPassword: WideString; out pErrorMessages: ErrorMessages): HResult; safecall;

donde el parámetro pErrorMessages es una estructura en la que devolver los posibles errores que se pueden haber originado en el servidor de capa intermedia, su declaración es la siguiente:
ErrorMessages = packed record
nAppErrorCode: Integer;
szAppErrorMessage: WideString;
nOtherErrorCode: Integer;
szOtherErrorMessages: WideString;
end;


Ahora bien. El error se produce en la aplicación cliente cuando intenta ejecutar el método Connect que me devuelve el siguiente mensaje de error Interface not supported. OJO. Este error solo dá cuando lo intento ejecutar con la conección establecida con el componente TSocketConnection, porque con el componente TDCOMConnection se ejecuta perfectamente.

El ejemplo del llamado en ambos casos es el siguiente:
Ejemplo con TDCOMConnection

var
pErrorMessage : ErrorMessages;
szUserName ,
szPassword : WideString;
begin
szUserName := '';
szPassword := '';

DCOMConnection1.Connected := True;
if DCOMConnection1.Connected then
if Failed( ( DCOMConnection1.GetServer as IProgramaciones ).Connect( szUserName, szPassword, pErrorMessage ) ) then
ShowMessage( 'error' );


Ejemplo con el TSocketConnection

var
pErrorMessage : ErrorMessages;
szUserName ,
szPassword : WideString;
begin
szUserName := '';
szPassword := '';

SocketConnection1.Connected := True;
if SocketConnection1.Connected then
if Failed( ( SocketConnection1.AppServer as IProgramaciones ).Connect( szUserName, szPassword, pErrorMessage ) ) then
ShowMessage( 'error' );


Obviamente la aplicación ScktSrvr.exe se está ejecutando en el sitio donde se está ejecutando el servidor de capa intermedia y la aplicación de capa intermedia está registrada también.

Concretando, mi pregunta es ¿Qué puede estar pasando para que me dé ese error solo cuando utilizo el componente TSocketConnection y no con el TDCOMConnection?

¿Puede alguien ayudarme y orientarme un poco referente al tema ?

Agradecería también si alguien tiene algún ejemplo de aplicación en tres capas usando TSocketConnection me lo haga llegar a mi dirección de correo xxx@xxx.com ¡no es válido pedir respuestas por correo!

Os agradezco de antemano el tiempo prestado por ayudarme a encontrar una respuesta para mi problema.

Paulao
13-03-2008, 18:52:29
Mira, el problema estas en su archivo _TLB. Voy a mandar a ud um ejemplo, pero lo hare por el foro, ok? Pero no es posible ahora. Mañana o despues te lo mando.