Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/10/2005, 13:32
Avatar de julioszabo
julioszabo
 
Fecha de Ingreso: octubre-2004
Mensajes: 47
Antigüedad: 19 años, 6 meses
Puntos: 0
Probemas con Dll de .Net en COM+

Hola a Todos:
Escribo este topico para ver si alguien alguna vez renego con esto y me pueda dar una mano, en su momento fue la solucion a unos de los problemas que plantie en este foro, pero cuando lo lleve a la practica no funciono.
La situacion:
Tengo un componente creado en .Net, es un proyecto de Clase con 2 metodos publicos que los utilizo para subir y bajar archivos. El tema es que la carpeta donde se encuantran estos archivos, esta protegida con contraseña. Para solucionar esto, firme el AssemblyInfo y puse un par de referencias para poder publicar la dll que genera en COM+, bajo el usuario que tiene los permisos de la carpeta donde se encuantra el Archivo.
Lo ocurrido:
Genere y publique la dll del proyecto en COM+, despues de renegar un poco e investigar como se hacia, lo logre. Probe subir y bajar archivos desde la Carpeta en cuestion, sin permisos y andubo lo mas bien.
El Problema:
Para hacer el DownLoad, me baje un codigo de la Web, que hasta este momento funcionaba de lo mas bien, pero cuando le puse la contraseña a la carpeta y la misma la setie en COM+, me largaba un error en uno de los objetos. Este es el codigo del Metodo de una de las clases de mi proyecto que llama al Metodo de la Dll:

public Sub BajarArchivo(ByRef pFormWeb as Object, ByVal pPathToDownload as String, ByVal pNameToFileDestination as String)

'- pForm es el Objeto Response pasado como Referencia
'- objetos
Dim objStream As Stream
Dim objFileManager As FileManager 'Clase de la dll en COM+
'- Genero un Contenedor de Lectura de 10K bytes
Dim Buffer(10000) As Byte
Dim Length As Integer
Try
'- obtengo el binario
objFileManager = New FileManager
objStream = objFileManager.DownloadFile(pPathToDownload)

'- Total de bytes a leer
Dim DataToRead As Long = objStream.Length
'- Seteo el HTTP
pFormWeb.ContentType = "Application/Octet-Stream"
'- Inicializo e indico el nombre del Archivo por Defecto
Call pFormWeb.AppendHeader("Content-Disposition", "Attachment; Filename=""" & pNameToFileDestination & """")
'- Leo los bytes
While DataToRead > 0
'- Verifico que el cliente este conectado
If pFormWeb.IsClientConnected Then
'- Leo los datos del Contenedor de Lectura
'- y almaceno el Tamaño de la lectura
Length = objStream.Read(Buffer, 0, 10000)
'- Escribo los datos en el Disco del Cliente
Call pFormWeb.OutputStream.Write(Buffer, 0, Length)
'- Limpio los datos del HTML
Call pFormWeb.Flush()
'- Limpio el Contenedor de Lectura
ReDim Buffer(10000)
'- Calculo la cantidad de bytes restantes a leer
DataToRead = DataToRead - Length
Else
'- Finalizo la lectura si el cliente se desconecta
DataToRead = -1
End If
End While
Catch ex As Exception
'- Mensaje de cualquier Error
Call pFormWeb.Write("<script> window.alert ('" & ex.Message & "'); </script>")
Finally
If IsNothing(objStream) = False Then
'- Cierro el Archivo
objStream.Close()
pFormWeb.end()
End If
End Try
End Sub

Metodo "DownloadFile" de la Dll:

Public Function DownloadFile() as Object
'- Abro el archivo
objStream = New System.IO.FileStream(pPathToDownload, _
System.IO.FileMode.Open, _
IO.FileAccess.Read, _
IO.FileShare.Read)
'- retorno
Return objStream
End Function

Bueno, como ya dije, esto funciona, sin permisos sobre COM+ y sobre la Carpeta donde estan los Archivos. El error me lo da en la Linea que esta en Rojo, y me dice que no se puede cerrar el Archivo, he probado de mil formas, y no lo he podido hacer andar. Por ahi el problema es que paso el objeto Stream y este tenga algun vinculo con el que abrio la Dll que tiene los permisos, pero no se como solucionarlo.

Si alguien renego con esto alguna vez o se le ocurre alguna otra forma de solucionarlo, por favor, me avise.

Desde ya muchas gracias.

Julio.