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:
Código Delphi
[-]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:
Código Delphi
[-]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
Código Delphi
[-]
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
Código Delphi
[-]
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.