Visual Basic.NET - Servicio que usa API para comunicarse con servicio

 
Vista:

Servicio que usa API para comunicarse con servicio

Publicado por Francisco (1 intervención) el 30/05/2012 14:18:40
Hola a todos.

Tengo un servicio "Cliente" que se comunica con un servidor.
Para comunicarme con el servicio "Cliente", tengo un API DLL tipo COM , la cual referencia en mi proyecto de Visual Basic .NET, que contiene una serie de Métodos, para comunicarme con el servicio "Cliente". Una de los métodos de la API es Login/Logout, el cual tiene asociado un evento EstadoLogin, que invocará el servicio "Cliente" con la respuesta del servidor.

Hasta aquí un poco como está implementado el sistema que tengo.
Decir que servicio "Cliente" y la API DLL para comunicarme con este servicio, son componentes externos, no los he desarrollado yo, son de terceros.

Si creo un proyecto del tipo "Aplicación para Windows" en el Visual Basic .NET, con formularios, referencio la API y creo el objeto que necesito, llamo al método Login, me da una respuesta de petición realizada, y me confirma mediante el Evento Login. Hasta aquí todo bien.

La declaración de la api la hago:

Private WithEvents objServidorSDS As SDSAPI.ServidorSDS

y creo el objeto:

objServidorSDS = New SDSAPI.ServidorSDS

objServidorSDS.Login("usuarrio", "password")

Capturo evento

Private Sub objServidorSDS_EstadoLogin(ByVal iValor As Short) Handles objServidorSDS.EstadoLogin
Log("INFO", "Petició Login Realitzada: " + iValor)
End Sub

El problema viene, si en vez de un proyecto "Aplicación para Windows" , creo un proyecto que sea un "Servicio Windows", y referencia igualmente la API DLL, declarada de la misma manera, al arrancar el servicio crea el objeto, pero cuando hago una llamada al método Login:

objServidorSDS.Login("usuarrio", "password")

El servicio se para y si capturo la excepción dice:

EXCEPTION: ServidorSDS No se puede convertir el objeto COM del tipo 'SDSAPI.ServidorSDSClass' al tipo de interfaz 'SDSAPI._ServidorSDS'. Ocurrió un error de operación debido a que la llamada QueryInterface en el componente COM para la interfaz con IID '{C1BA8BD3-0E5B-4E59-8C95-B1FCE5E1595C}' generó el siguiente error: Interfaz no compatible (Excepción de HRESULT: 0x80004002 (E_NOINTERFACE))."

Si en vez de lo hago de la siguiente manera :

Private WithEvents objServidorSDS As Object

y creo el objeto:

objServidorSDS = CreateObject("SDSAPI.ServidorSDS")

objServidorSDS.Login("usuarrio", "password") ' Funciona correctamente

Pero lo que no se es como capturar los eventos.

Esto se podría hacer de alguna manera?

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder