26/10/2005, 13:32
|
| | | Fecha de Ingreso: octubre-2004
Mensajes: 47
Antigüedad: 20 años, 2 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. |