SharePoint 2010 y .NET Framework 4.0

Hoy un compañero se ha encontrado con algo que no había visto hasta hoy. Como sabréis, SharePoint 2010 funciona con .NET Framework 3.5 (ASP.NET 2.0) y no con .NET Framework 4.0 (ASP.NET 4.0). En una instalación típica de SharePoint esto no será ningún problema pero al parecer en algunas condiciones os encontraréis con que a la hora de crear la aplicación web de la Administración Central durante el periodo de instalación, el sistema intentará crearla con ASP.NET 4.0 y os encontraréis con un error similar al siguiente:

Failed to provision the SharePoint Central Administration Web Application.

An exception of type System.Runtime.InteropServices.COMException was thrown. Additional exception information: Filename: \?C:inetpubwwwrootwssVirtualDirectories46824web.config

Line number: 25

Error: There is a duplicate ‘system.web.extensions/scripting/scriptResourceHandler’ section defined

El fallo es fácil de solucionar. Bastará con ir al IIS y cambiar la versión de .NET Framework establecida para el pool de aplicaciones de la Administración Central de SharePoint. El problema es que haciendo esto no evitaremos que el error vuelva a aparecer cada vez que creamos una nueva aplicación web. ¿Cómo lo solucionamos de manera permanente? Siguiendo los siguientes pasos:

Abrimos la consola de administración de IIS y en el menú de acciones de la derecha pulsamos el enlace Set Application Pool Defaults…

image

En la sección General establecemos el valor de .NET Framework Version como v2.0.

image

Manten limpias tus características

Una de las etapas más aburridas a la vez que necesarias en el desarrollo de software es aquella en la que, una vez lo tenemos todo funcionando perfectamente tenemos que limpiar, pulir y dar cera a los elementos que hemos creado. Algunas tareas que pueden ser relativamente divertidas como refactorizar código y otras que son un absoluto peñazo como, por ejemplo, asegurar que se siguen unas directrices básicas en cuanto a nomenclatura (sí, StyleCop y Resharper nos ayudan bastante pero no impiden que cada developer tiene sus manías a la hora de nombrar clases, por ejemplo).

Hoy, realizando esas tareas de limpieza he dado con un error típico que solemos cometer los que trabajamos con SharePoint debido a cómo Visual Studio 2010 trabaja los conceptos de característica y módulo. El mayor de los problemas es que habitualmente es un error silencioso (y todos sabemos que si algo no hace ruido no es peligroso –salvo la excepción que todos conocemos–) y no solemos prestarles atención.

El problema radica en el hecho que cuando creas un módulo nuevo en Visual Studio 2010, éste se añade a la última característica que hemos añadido a la solución. Si, como es lógico, queremos añadir el módulo a una caacterística concreta, al hacerlo no observaremos ningún mensaje indicando que el módulo ya está añadido a la original. Para evitar este problema basta con mirar la ventana de output de Visual Studio cuando creamos el paquete wsp. Veremos mensajes como los siguientes

c:codeMyProject\PackagePackage.package : warning SPT6: The Project Item "Module1" is included in the following Features: Feature1, Feature2
c:codeMyProjectPackagePackage.package : warning SPT6: The Project Item "Module2" is included in the following Features: Feature3, Feature4

Viendo esto resulta relativamente sencillo ir a aquellas características donde no deberían estar incluídos los módulos indicados en el error y eliminarlos fácilmente.

¿Es buena la complejidad?

Siguiendo una conversación en Twitter de esta mañana, y a riesgo de polemizar un poco más, me tomo la libertad de expresar mi humilde opinión al respecto. No tiene por qué ser una opinión mejor que la del resto, pero tampoco tiene por qué ser peor, es simplemente una opinión más.

Para introduciros en el asunto os resumo un poco la conversación de esta mañana. Aparentemente alguien se quejaba de la complejidad del proceso de instalación de SQL Server y yo apuntaba que en ocasiones los procesos de instalación de aplicaciones debían ser incluso más complejos para evitar problemas futuros causados por instalaciones realizadas por profesional no cualificado para la tarea. La conversación derivó en opiniones relativas a que la instalación de SQL Server en realidad no era tan compleja y, por otro lado, en que justificar la complejidad era fácil, no merecía la pena, y hacía referencia a mentalidades del pasado. A continuación os expongo los motivos que tengo yo para pensar de la manera que pienso.

Primero, decir a los que no me conozcan que soy arquitecto de software especializado en .NET y sobretodo en SharePoint. Mi posición está claramente relacionada con el mundo del desarrollo y mis conocimientos de sistemas no son demasiado avanzados. No obstante, y debido a las particularidades del sector del desarrollo de software en España y debido las particularidades del desarrollo sobre la plataforma SharePoint tengo conocimientos básicos sobre Windows Server (especialmente en todo lo relacionado a los roles de servidor de aplicaciones y a IIS), SQL Server, Exchange Server, TMG, ForeFront, etc. También tengo conocimientos básicos de hardware (sé la diferencia entre RAM y HD, y conozco lo que tiene que tener un equipo para permitir virtualización) pero se me escapan conceptos que seguramente no son altamente avanzados como RAID 0, 1 o 5.

Dicho esto, tengo que decir que en unas pocas horas tengo montado un entorno con varias máquinas virtuales y con todos los componentes mencionados anteriormente instalados y funcionando. Eso significa, en mi opinión, que los procesos de instalación no son excesivamente complejos. Además, si por casualidad tengo que instalar alguna de estas piezas en producción, sé que dispongo de documentación suficiente en Technet (para productos Microsoft) como para hacerlo de manera más o menos adecuada.

Ahora bien, ¿cuál era la razón de mi tweet? Si yo soy capaz de instalar un SQL Server o un SharePoint siguiendo el asistente cualquier persona es capaz de hacerlo. Con cualquier persona no me refiero a “idiotas” (entre comillas que aparentemente no es lo mismo que idiotas) sino a personas que no tienen los conocimientos necesarios para desarrollar la tarea. Pero resulta que estamos en España y aquí, si puedo gastarme menos dinero en hacer una tarea, lo haré. Ahora no entraré en si es el mercado, si es nuestro caracter o si es una mezcla de ambos, pero es un hecho que si se plantea un proyecto de implantación de un producto, el 90% de los casos se lo lleva el que pone un precio hora más barato. Señores, ¿alguien sabe el coste de una persona con los conocimientos necesarios para instalar SharePoint, Exchange, SQL Server o TMG? ¿Alguien conoce una persona que tenga todas esas capacidades con un coste inferior a 20€/h? Que me lo diga que le doblo el sueldo.

Y os preguntaréis qué me importa a mí todo esto. Pues en realidad nada, simplemente expresaba mi opinión. De hecho, mientras las cosas sigan como están seguiré teniendo trabajo arreglando las implantaciones de SharePoint que han sido realizadas siguiendo el asistente. Lo único que me preocupa es que esta práctica siga haciendo daño al nombre de SharePoint, que está lejos de ser una plataforma perfecta (por eso sigo y seguiré teniendo trabajo) pero está aún más lejos de ser la basura que mucha gente piensa que es. Y quien piense que es una basura, que me presente una alternativa y la discutiré con mucho placer.

Y no penséis que estoy planteando proteger mi territorio para que nadie lo pise. Al contrario, fijaos que según lo que comento yo no debería tener “el carné” para instalar SQL Server, por ejemplo. Si pretendemos que traten la ingeniería de software como cualquier otra ingeniería tenemos que plantearnos que tiene que haber especialistas para cada una de las materias. Y ojo, tampoco estoy planteando que para instalar un SQL Server tengas que compilar un kernel. Contra más fácil sea hacer algo mayor será la productividad que es lo que interesa. Lo que yo planteo es que el proceso de instalación podría incorporar alguna característica que impidiera que el sistema funcione adecuadamente hasta que se cumplan ciertos requisitos, de la misma manera que se cambió la política con Windows Server donde por defecto todo está cerrado hasta que alguien va y lo abre.

Ahí queda mi opinión… espero las vuestras para ver si aprendo algo, aunque seguro que ninguno hará cambiar la opinión del otro si no es con cerveza. Con mucha cerveza…

No tengo visor de sucesos – Error 2: The system cannot find the file specified

El otro día un compañero me comentó que no podía conectarse a la VPN y que la máquina le iba, en general, muy mal. Como suele ser habitual en estos casos pasé el marrón a sistemas y me despreocupé por completo, porque para mí VPN son siglas de algo que sé que necesito, pero poco más…

El caso es que hoy me ha tocado sufrir a mí las consecuencias de lo que sea que le pasó a mi compañero y me he quedado sin conexión VPN. El error indicaba que el servicio Remote Access Connection Manager no estaba iniciado. La primera cosa que hice, obviamente, fue intentar iniciarlo. Como no lo conseguí, intenté acceder al visor de sucesos, encontrándome con otro error indicando que el visor de sucesos no estaba disponible. Volví a la consola de servicios y traté de iniciar el servicio Windows Event Log. Fue en ese momento cuando vi el error que encabeza este artículo: Error 2: The system cannot find the file specified.

Después del ataque de pánico inicial y de la pregunta evidente (¿qué fichero?) decidí acudir a mis amigos los foros para dar con lo siguiente:

http://social.msdn.microsoft.com/Forums/en/winserver2008appcompatabilityandcertification/thread/b803a3b0-559f-4a1b-ab44-4bb64e0c746d

Resumiendo, borré la siguiente clave de registro y todo volvió a la normalidad:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetserviceseventlogParameters

Si os preguntáis el por qué, haré como con mi compañero, os redirigiré a sistemas. Lo único que puedo deciros es que de ayer a hoy lo único que cambió en mi entorno fue la instalación de DotTrace y de algunas actualizaciones de Windows.