Archivo de la categoría: .NET

Microsoft .NET

Ejecutar aplicacion de escritorio como Administrador

microsoft-logo Una de las cosas que he necesitado hacer, y que nunca lo recuerdo, es tener la posibilidad de ejecutar directamente una aplicación como administrador.

Esta claro, que siempre tienes la posibilidad de, utilizando el botón derecho del ratón, seccionar la opción de “Ejecutar como administrador” (como se aprecia en la siguiente imagen)

RunAs

Pero existe veces en los que quieres que tu aplicación, solo permita ejecutarse con permisos de Administrador de la maquina, lo que permite realizar ciertas acciones que de otra forma no podrías. En este caso lo que hay que hacer es añadir un archivo de manifiesto o (app.manifest), donde se especifican múltiples metadatos de la aplicación, entre los que destaca, la seguridad.

Para añadir un archivo app.manifest a nuestra aplicacion, solo tienes que:

  • Aañadir desde Visual Studio, un nuevo archivo del tipo “Archivo de manifiesto de aplicación” como podemos apreciar:

app-manifest

  • Una vez añadido, editamos el archivo y donde aparece:
 

lo modificamos para que sea:

 

 

  • Por ultimo, solo nos queda acceder a las propiedades del proyecto, y dentro de Aplicación, seleccionar el archivo de manifiesto que hemos añadido:

app-manifest_2

Así la próxima vez que ejecutes la aplicación, solicitará credenciales de Administrador.

Referencia: Assembly Manifest

 

Visual Studio 11 Developer Preview Training Kit

Microsoft ha publicado el pasado día 17, la primera release del Developer Preview Kit para Visual Studio 11,  el cual incluye laboratorios prácticos para ayudarte a entender cómo aprovechar las mejoras de Visual Studio 11 y. NET Framework 4.5,  y sobre todo cómo gestionar el ciclo de vida de toda la aplicación.

Si no quieres instalarte el Developer Preview Kit al completo, tienes la opción de descargarte el Web Platform Installer Preview y seleccionar únicamente los labs que desees.

En cuanto a contenido del training kit, el resumen es el siguiente (de los laboratorios incluidos):

  • Visual Studio Development Environment:
    • A Lap Around the Visual Studio 11 Development Environment.
  • Languages:
    • Asynchronous Programming in .NET 4.5 with C# and Visual Basic.
  • Web:
    • What’s New in ASP.NET and Visual Studio 11 Developer Preview.
    • What’s New in ASP.NET Web Forms 4.5.
    • Build RESTful APIs with WCF Web API.
  • Application Lifecycle Management:
    • Building the Right Software: Generating Storyboards and Collecting Stakeholder Feedback with Visual Studio 11.
    • Agile Project Management in Team Foundation Server 11.
    • Making Developers More Productive with Team Foundation Server 11.
    • Diagnosing Issues in Production with IntelliTrace and Visual Studio 11.
    • Exploratory Testing and Other Enhancements in Microsoft Test Manager 11.
    • Unit Testing with Visual Studio 11: MSTest, NUnit, xUnit.net, and Code Clone.
  • Windows Metro Style Apps:
    • Windows 8 Developer Preview Hands on Labs from BUILD.

Error 401 no autorizadado en InfoPath Forms Services con SharePoint 2010

Después de migrar multiples formularios InfoPath de MOSS 2007 a SPS 2010, se produce un error intermitente, cuando un formulario utiliza el Web Service: GetUserProfileByName para recuperar la información del usuario actual.

Los errores que podemos ver en los logs de Sharepoint son:

  • Data adapter failed during OnLoad: The remote server returned an error: (401) Unauthorized.
  • The following query failed: GetUserProfileByName (User: , Form Name: , … Type: DataAdapterException, Exception Message: The remote server returned an error: (401) Unauthorized. The remote server returned an error: (401) Unauthorized.)

La arquitectura que estamos usando para SharePoint es de dos nodos front-end configurados con balanceo de carga. Esto provoca que se produzaca una autenticación de doble salto (es incapaz de pasar las credenciales de usuario de un servidor a otro).

La solución ideal es configurar correctamente el balanceador de carga para evistar este problema, pero si no nos es posible, otra solución es utilizar el archivo hosts para obligar que las peticiones se realicen sobre la misma maquina y no haya doble salto de credenciales.

Para ello solo hay que añadir una entrada en el archivo hosts (c:\windows\system32\drivers\etc\hosts) de cada uno de los front-end, la direccion IP de loopback apuntando al dominio que se este usando…

Ejemplo: Si tiene dos servidores web: Servidor1 y Servidor2 en 192.168.0.1 y 192.168.0.2, la entrada del archivo de hosts para cada máquina sería:

  • Para el Servidor1:
    • 127.0.0.1 tu.dominio.sharepoint
  • Para el Servidor2:
    • 127.0.0.1 tu.dominio.sharepoint

De esta forma, cuando cada servidor haga una petición a “tu.dominio.sharepoint”, utilizará la entrada del archivo hosts y hará una petición a la misma maquina evitando el doble salto de credenciales.

Obtener la jerarquía de la Taxonmia en SPS 2010

Una de las opciones en SharePoint 2010 para la etiquetación de contenido es el uso del Servicio de Metadatos que implementa la plataforma. Una de las mejoras formas de conocer el modelo de objeto de taxonomia (TermStore, Group, TermSet y Term) es la realización de un pequeño ejemplo, donde se pinta en un control treeview jerarquicamente todos los objetos definidos.

En el siguiente ejemplo se muestra, he incluido en un Visual WebPart un control treeview al que he llamado taxTree, el cual pinta la taxonomia definida en el Servicio de Metadatos de SharePoint. En cuanto a las imagenes usadas, se reutilizan las propias de SharePoint almacenadas en /_layouts/images/:

private TreeNode StoreNode;
private TreeNode GroupNode;
private TreeNode SetNode;
private TreeNode TermNode;
private String ImageFolder;

protected void Page_Load(object sender, EventArgs e)
{
  taxTree.Nodes.Clear();
  GetTaxonomyStructure();
}

private void GetTaxonomyStructure()
{
  ImageFolder = "/_layouts/images/";
  taxTree.ShowLines = true;
  TaxonomySession session = new TaxonomySession(SPContext.Current.Site);
  foreach (TermStore store in session.TermStores)
  {
	StoreNode = new TreeNode(store.Name, store.Id.ToString(), ImageFolder + "EMMRoot.png");
	taxTree.Nodes.Add(StoreNode);
	foreach (Group group in store.Groups)
	{
	  GroupNode = new TreeNode(group.Name, group.Id.ToString(), ImageFolder + "EMMGroup.png");
	  StoreNode.ChildNodes.Add(GroupNode);
	  foreach (TermSet set in group.TermSets)
	  {
		SetNode = new TreeNode(set.Name, set.Id.ToString(), ImageFolder + "EMMTermSet.png");
		GroupNode.ChildNodes.Add(SetNode);
		foreach (Term node in set.Terms)
		{
		  TermNode = new TreeNode(node.Name, node.Id.ToString(), ImageFolder + "EMMTerm.png");
		  SetNode.ChildNodes.Add(TermNode);
		  GetChildTerms(TermNode, node);
		}
	  }
	}
  }
}

private void GetChildTerms(TreeNode actNode, Term term)
{
  foreach (Term subTerm in term.Terms)
  {
	TreeNode subNode = new TreeNode(subTerm.Name, subTerm.Id.ToString(), ImageFolder + "EMMTerm.png");
	actNode.ChildNodes.Add(subNode);
	GetChildTerms(subNode, subTerm);
  }
}

Añadir una DLL a la GAC con C#

Pues una foroma de registrar en la GAC librerias por codigo es la siguiente:

Referenciar el assembly system.EnterpriseServicess en tu proyecto.​

using System.EnterpriseServices.Internal;

public void Update(DirectoryInfo folder_GAC)
{
  //verifica si la caparpeta contiene dll
  if(folder_GAC.exists)
  {
    //añade cada dll encontrada a la GAC
    foreach (FileInfo dll in folder_GAC.GetFiles("*.dll"))
    {
      //instalacia el objeto Publish e instala la dll
      Publish objpublish = new Publish();
      objpublish.GacInstall(dll.FullName);
    }
  }
}

Para mas informacion sobre el objeto Publish, accede aqui.

SharePoint Guidance 2010 Hands On Lab

Hace algo mas de una semana, ha visto la luz SharePoint Guidance 2010 Hands On Lab, gracias al equipo de patterns & practices  de Microsoft, que es un proyecto de CodePlex que contiene un conjunto de seis laboratorios: uno para logging, uno para service location y cuatro para application setting manager.

La realización de cada laboratorio lleva unos 20 minutos su realización, y viene totalmente definido en un archivo PDF (uno por cada lab) donde se detallan todos los pasos para la creación, ejecución y despliegue de estos.

Puedes descargarte los laboratorios desde aquí.

Nuevos .chm de SharePoint 2010 de TechNet

Ya están disponibles los archivos de ayuda en formato .chm (compiled HTML Help) de la plataforma SharePoint 2010 proporcionados por el TechNet desde el punto de vista de IT. Puedes descargar los archivos de las siguientes plataformas/productos:

Desplegar aplicaciones con PowerShell en SharePoint 2010

Micosoft Office SharePoint Server 2007 incluye una herramienta para administrar servidores y sitios por linea de comando llamada stsadm. La nueva versión de la plataforma, a parte de seguir incorporando esta herramienta, implementa comandos por PowerShell para realizar las mismas funciones que se hacían anteriormente.

Una de las funciones mas habituales que se realizan con estas herramientas a nivel de administración, es el despliegue de soluciones en los diferentes entornos de SharePoint (desarrollo, integración, pre-producción, producción…).

Microsoft recomienda usar PowerShell en vez de stsadm para la versión 2010 de SharePoint, así que voy a intentar replicar en esta nueva herramienta, lo que estábamos acostumbrados a realizar antes. Contando que tenemos una solución que hemos implementado y queremos desplegar en un entorno, llamada: MiSolucion.wsp, lo que hacíamos era algo similar a esto:

REM Instala una solución a nivel de WebApplication
stsadm –o addsolution –filename “C:MiSolucion.wsp”
stsadm –o deploysolution –name MiSolucion.wsp –url http://miwebappp –allowgacdeployment –immediate
REM Actualiza una solución previamente instalada
stsadm –o upgradesolution –name MiSolucion.wsp –filename “C:MiSolucion.wsp” -immediate
REM Desactiva y borra la solución
stsadm –o retractsolution –name MiSolucion.wsp –url http://miwebappp –immediate
stsadm –o deletesolution –name MiSolucion.wsp

Con PowerShell para hacer lo mismo deberíamos escribir:

#Instala una solución a nivel de WebApplication
Add-SPSolution “C:MiSolucion.wsp”
Install-SPSolution –Identity MiSolucion.wsp –WebApplication http://miwebappp –GACDeployment
#Actualiza una solución previamente instalada
Update-SPSolution –Identity MiSolucion.wsp –LiteralPath “C:MiSolucion.wsp” –GacDeployment
#Desactiva y borra la solución
Uninstall-SPSolution –Identity MiSolucion.wsp –WebApplication http://miwebappp
Remove-SPSolution–Identity MiSolucion.wsp
Para actualizar una solucion ya existente, lo mas facil y sencillo es utilizar (con PowerShell) unicamente el comando: Update-SPSolution, sin desinstalar previamente esta.
Para mas información sobre PowerShell puedes comprobarlo aquí.

Gestión de errores en SharePoint 2010s

Esta nueva versión de la plataforma SharePoint 2010, incorpora numerosas mejoras, siendo una de las mas importantes y que seguramente, primero usaremos, es la gestión de errores y logs de SharePoint.

En la versión 2007, era una tarea tediosa tener que buscar información de una excepción no controlada (suele pasar cuando introducimos código que produce un error fuera de un try/catch), en los archivos de logs generados. SharePoint volcaba tanta información, que localizar el error podía llevarte horas…

En la nueva versión, se ha mejorado esta funcionalidad, para que localizar la información, sea una tarea mas rapida… La siguiente captura de pantalla, muestra la información del error cuando este se produce en SharePoint. En esta versión además de la descripción se devuelve el identificador del objeto (o GUID) que ha provocado el error:

Para obtener mas detalles del error, debemos ir a la carpeta: “C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14LOGS” y abrir el archivo de log, que mas se acerque a la fecha/hora que este se ha producido. En este archivo se ha de lanzar una busqueda por el identificador del objeto, lo que nos ahorrará mucho mas tiempo en la búsqueda, como se puede apreciar en la imagen:

SAP Connector for Microsoft .NET 3.0

Hace un par de semanas, SAP ha liberado una nueva versión del SAP Connector for Microsoft .NET, también conocido como NCo, en este caso estamos hablando de la 3.0. Esta versión es una evolución, de la versión 2.0 basada en el .NET Framework 1.x y Visual Studio 2003. Esto acarreaba muchos problemas de entorno, y sobre todo de mantenimiento.

En la version 2.0 la interoperatividad estaba basada en la librería de SAP librfc32.dll, la cual estaba implementada en código no manejado. Como os imagináis, cada vez que se llamaba desde una aplicación .NET a dicha librería, había que realizar marshalling (es decir, serializar y desserializar los objetos) lo que afectaba al rendimiento de las aplicación.

Esta nueva versión, la 3.0, implementa una interoperatividad entre SAP y SharePoint usando Web Servicies basados en estándares. Además se ha reescrito por completo en el NCo el protocolo RFC (Remote Function Call) para una mejor comunicación (de forma binaria) entre las dos.

La versión 2.0 implementa un modelo de programación generado en tiempo de diseño. Por culpa de este diseño, si se realizaba un cambio en alguna RFC, era obligatorio regenerar de nuevo los proxies afectados, teniéndolos que volver a codificar de forma manual.

Como importante mejora, en el NCo 3.0 la interoperatividad de las RFCs se realiza de forma dinámica ahorrando tiempos de implementación. Esta actualización dinámica, ya se venía realizando desde versiones muy antiguas del Java Connector (JCo) y era una funcionalidad de gran peso, a la hora de proponer una plataforma de integración con SAP en las propuestas.

Resumiendo, esta nueva versión, integralmente implementada en .NET  (código manejado) mejora tanto el modelo de programación como el rendimiento, con respecto a la versión anterior, y además permite el uso de cualquier versión de Visual Studio (sin necesidad de obligarte a una concreta).

Esta nueva librería puede descargarse desde aquí (es necesario tener cuenta de soporte en SAP Network)