Lo primero que deberemos tener en cuenta es ¿Qué son documentos grandes? Quizás no exista una verdad absoluta para esta respuesta, pero una buena aproximación, podría ser los documentos de más 16MB y/o de 50MB (16 MB para documentos que se deseen indexar). No es un vacile, va en serio. Pero claro, el concepto de Documentos Grandes en MOSS, no tiene que ver estrictamente con el tamaño del documento, sino con ciertas limitaciones que nos podremos encontrar, y que en caso de trabajar con documentos de menor tamaño, no nos encontraríamos. Evidentemente, a fecha de hoy, un documento de 16MB o 50BM, no es grande como tal (por dios, con la cantidad de pelis e imágenes ISO que nos podemos descargar del RapidShare, y aquí preocupados por 16MB de mierda ;-)
A continuación, vamos a enumerar y argumentar, diferentes detalles relacionados con la manipulación de documentos grandes en una instalación de MOSS 2007, tanto en lo relacionado con las Limitaciones que adelantábamos, como también determinados ajustes para evitar excepciones de timeout, etc., y así poder aprovechar completamente las ventajas de las Librerías de Documentos de MOSS y las capacidades de Indexación y Búsqueda de MOSS.
La opción Maximum Upload Size de las Aplicaciones Web tiene un valor por defecto de 50 MB
Esto implica, que si intentamos subir (upload) un documento mayor de 50 MB, no tendremos éxito en nuestra hazaña (al menos, en una instalación por defecto). Así, al intentar subir un documento a una Librería de Documentos a través del formulario Upload Document, se produciría el error:
The form submission cannot be processed because it exceeded the maximum length allowed by the Web administrator. Please resubmit the form with less data.
En consecuencia, desde la Consola de Administración Central, en la pestaña Application Management, deberemos utilizar la opción Web application general settings de la sección SharePoint Web Application Management. Una vez en el formulario Web Application General Settings, deberemos seleccionar la Aplicación Web deseada, y seguidamente ya podremos cambiar la opción Maximum Upload Size, que como se muestra en la siguiente pantalla capturada, viene configurada por defecto en 50 MB.
Una vez aumentado el valor de la propiedad Maximum Upload Size, estaremos en situación de subir documentos de mayor tamaño a las Librerías de Documentos de la Aplicación Web para la que lo acabamos de configurar.
Un último detalle sobre la propiedad Maximum Upload Size, para quien tenga la duda, si tenemos la opción Maximum Upload Size establecida a 50MB (por poner ejemplo), y tenemos en una Librería de Documentos un fichero de tamaño mayor, sí podremos descargarnos el documento.
Error al copiar en Vista Explorador o desde el Explorador de Windows ficheros mayores de 50 MB: No se puede copiar, no se puede leer del disco o archivo de origen
En una Librería de Documentos de MOSS 2007, es posible utilizar la Vista Explorador (Explorer View), para poder visualizar la Librería de Documentos de una forma similar a como se utiliza el Explorador de Windows, como puede observarse en la siguiente pantalla capturada.
Otra forma similar de acceder a una Librería de Documentos de MOSS 2007, es abrirla en el Explorador de Windows, utilizando la opción Open with Windows Explorer del menú Action de la Librería de Documentos, como se muestra en la siguiente pantalla capturada.
El efecto conseguido, como nos podemos imaginar, es el siguiente.
Sin embargo, si intentamos copiar un documento de tamaño mayor a 50 MB desde dicha Librería de Documentos, obtendremos el error de que no se puede copiar porque no se puede leer del disco o archivo de origen (Error al copiar un archivo o carpeta: No se puede copiar. No se puede leer del disco o archivo de origen.). Atónito se queda uno.
En esta ocasión, el problema reside en el equipo cliente y no en el servidor de MOSS. Habitualmente, cuando accedemos a una Librería de Documentos desde una estación de trabajo Windows, de las formas descrita (Vista Explorador o Explorador de Windows), estamos utilizando de forma indirecta, un servicio existente en nuestra estación de trabajo: el servicio Web Client o Cliente Web (depende de que tengamos instalado Windows en inglés o en español). Este servicio, por defecto está limitado a trabajar con documentos de hasta 50 MB. Sin embargo, es posible alterar este comportamiento modificando el Registro de Windows.
Las configuraciones del registro relevantes para este caso, se encuentran bajo la siguiente rama:
HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
Existen varios parámetros que podemos configurar: AcceptOfficeAndTahoeServers, BasicAuthLevel, FileAttributesLimitInBytes, FileSizeLimitInBytes, InternetServerTimeoutInSec, LocalServerTimeoutInSec, SendReceiveTimeoutInSec, ServerNotFoundCacheLifeTimeInSec, SupportLocking.
En particular, el parámetro que configuré para aumentar el límite de los 50 MB, es el parámetro FileSizeLimitInBytes. En particular, tuve que crear un nuevo parámetro de nombre FileSizeLimitInBytes, tipo REG_DWORD, y valor 100.000.000 en decimal (esto son, aprox. 100 MB), como se puede apreciar en la siguiente pantalla capturada.
Muy importante, tras modificar los parámetros WebClient del Registro, es reiniciar el Sistema Operativo. No es suficiente con reiniciar el servicio WebClient, al menos, no en todos los casos (en mi caso, WinXP SP3 + IE8 no funcionó, lo cual, no implica necesariamente que en todas las versiones de Sistema Operativo e Internet Explorer, sea estrictamente necesario).
Puede encontrarse más información en el POST WebDAV Redirector Registry Settings de Robert McMurray.
Por defecto, sólo se pueden indexar archivos de hasta 16 MB
MOSS 2007, al igual que las versiones anteriores, por defecto sólo puede indexar archivos de hasta 16 MB. En caso de intentar indexar archivos de mayor tamaño (archivos grandes), podemos encontrarnos con mensajes del tipo The file reached the maximum download limit. Check that the full text of the document can be meaningfully crawled, que en español viene a ser algo como El archivo ha alcanzado el máximo límite. Chequee que el texto completo del documento puede ser efectivamente indexado.
La solución para poder indexar archivos mayores de 16 MB, consiste en agregar una nueva entrada al registro de Windows, para lo cual se pueden seguir los siguientes pasos:
- Utilizando la herramienta regedit.exe, posicionarse en HKLM\SOFTWARE\Microsoft\Office Server\12.0\Search\Global\Gathering Manager, y agregar una nueva entrada de nombre MaxDownloadSize, tipo REG_DWORD, y valor el tamaño máximo de los ficheros que se desea indexar, en MB.
- Reiniciar el Servidor MOSS.
- Ejecutar una indexación completa (Full Crawl).
A continuación se muestra un detalle de la configuración de la opción MaxDownloadSize en el registro de Windows. En dicho ejemplo, se ha configurado en 100 MB.
Por otro lado, la configuración de la opción MaxDownloadSize puede provocar excepciones de timeout en la indexación, pues al trabajar con ficheros más grandes, los tiempos de espera serán también mayores.
Para evitar este efecto colateral, es posible configurar (bueno, mejor dicho, aumentar) las opciones Connection Time y Request acknowledgement time en las opciones de búsqueda de la Granja MOSS. Para ello, en la Consola de Administración Central, en la pestaña Application Management, entraremos en la opción Manage search service de la sección Search.
En la pantalla Manage Search Service, seleccionaremos la opción Farm-level search settings.
En la parte inferior de la pantalla Manage Farm-Level Search Settings, tenemos disponibles para configurar las opciones Connection Time y Request acknowledgement time, que podremos configurar con los valores deseados.
Por mostrar un ejemplo real, a continuación mostramos el resultado de una búsqueda que devuelve dos documentos, uno 4MB y otro de 18MB. Para poder conseguir este resultado de búsqueda, fue necesario configurar en el registro la opción MaxDownloadSize. Sin embargo, sólo con esto no fue suficiente, y hasta que no se aumentaron los valores de configuración de Timeout de búsquedas, el documento de 18MB no pudo ser correctamente indexado, y en consecuencia, no aparecía en ningún resultado de búsqueda.
Aumentar el valor por defecto de la opción large-file-chunk-size
El tamaño de Chunk está relacionado con la cantidad de información que puede leerse de un fichero de una sola vez, y por defecto está establecido en 5 MB. En algunos casos, puede ser recomendable aumentar el tamaño de la opción large-file-chunk-size, con el objetivo de aumentar el rendimiento, siempre teniendo en cuenta que si utilizamos un valor muy alto, podemos impactar en el consumo de memoria del servidor MOSS.
La forma de poder modificar la opción large-file-chunk-size, es a través del comando STSADM (recordemos que STSADM es nuestro amigo ;-). En consecuencia, los pasos a seguir son:
- Ejecutar un comando STSADM desde una ventana de símbolo del sistema, similar a stsadm.exe -o setproperty -pn large-file-chunk-size -pv [TamañoBytes]. De este modo, si queremos establecer el valor de large-file-chunk-size a 10 MB, deberíamos ejecutar un comando como Stsadm.exe -o setproperty -pn large-file-chunk-size -pv 10485760.
- Reiniciar el IIS. Para ello, se puede ejecutar el comando iisreset /noforce, desde una ventana de símbolo del sistema.
Aumentar la propiedad Connection TimeOut del Sitio Web de IIS
Otra propiedad susceptible de ser modificada, es la propiedad Connection TimeOut, disponible para cada Sitio Web de IIS. Esta configuración la podremos realizar utilizando la herramienta administrativa IIS Manager. Para ello, en IIS Manager, mostraremos el diálogo de Propiedades del Sitio Web deseado.
En el diálogo de Propiedades del Sitio Web, configurar la opción Connection Timeout, al valor deseado.
Ajustar el valor del parámetro httpRuntime en el Web.Config de la Aplicación Web de MOSS
Con el objetivo de evitar errores del tipo System.Web.HttpException: Request timed out, HttpException (0x80004005): Request timed out, es posible aumentar el valor del parámetro httpRuntime en el Web.Config de la correspondiente Aplicación Web de MOSS.
El valor por defecto del parámetro httpRuntime en una Aplicación Web de MOSS es el siguiente, teniendo encuenta que por defecto, el valor de la propiedad executionTimeout es 90.
<httpRuntime maxRequestLength="51200" />
En consecuencia, podemos ajustar el valor, como se muestra a continuación (es un ejemplo orientativo), aumentando así el valor de Time Out a 300 segundos, y de maxRequestLength a 100MB:
<httpRuntime executionTimeout="300" maxRequestLength="102400" />