Objetivo
Desarrollar en C# método que nos permita realizar una conexión con Alfresco usando la librería DOTCMIS.Paso 1:
Descargar la librería DOTCMIS.Paso 2:
Agregar la librería DOTCMIS en nuestro proyecto.Paso 3:
Crear una clase llamada: "CMISIntegrationRepository" de acceso público.Paso 4:
Agregar las siguientes referenciasusing DotCMIS;
using DotCMIS.Client.Impl;
using DotCMIS.Client;
using DotCMIS.Data.Impl;
using DotCMIS.Data.Extensions;
using System.Configuration;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using DotCMIS.Data;
Paso 5:
Creamos una variable global para toda la clase, estática y privada. Del siguiente modo:private static ISession session = null;
Paso 6:
Creamos un método llamado: "CreateConnection" de acceso privadoprivate void CreateConnection()
{
try
{
/*Sí la variable session es igual a null, llamo al método Connect para crear una y asignarse la a dicha variable*/
if (session == null)
{
/*Obtengo el nombre de usuario, password,reposityId y la url del servicio*/
string UserName = System.Configuration.ConfigurationManager.AppSettings["CMISUserName"].ToString();
string Password = System.Configuration.ConfigurationManager.AppSettings["CMISPassword"].ToString();
string RepositoryId = System.Configuration.ConfigurationManager.AppSettings["RepositoryId"].ToString();
string ServicesUrl = System.Configuration.ConfigurationManager.AppSettings["ServicesUrl"].ToString();
/*Llamo al método Connect pasando le los parametros necesarios para crear la sesión*/
session = Connect(UserName, Password, ServicesUrl,RepositoryId);
}
}
catch(Exception error)
{
/*En caso de algún error, lanzo una excepción*/
throw new Exception("Ha ocurrido un error al tratar de conectarse al servicio.",error);
}
}
Paso 7:
Creamos el método "Connect" de acceso privado que recibirá cuatro parametros:- user: Usuario para conectarse a Alfresco.
- password: Password para del usuario.
- servicesUrl: URL del servicio de CMIS (Ejemplo: https://host:port/alfresco/cmisws/)
- repositoryId: Id del repositorio. (Pueden obtener lo en la siguiente dirección: https://host:port/alfresco/service/cmis/index.html)
private ISession Connect(string user, string password, string servicesUrl, string repositoryId)
{
/*Esto resuelve un problema con los certificados SSL cuando son auto autentificados.*/
/*No recomendable para ambientes de producción*/
ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
IDictionary<string, string> parameter = new Dictionary<string, string>();
parameter.Add(DotCMIS.SessionParameter.User, user);
parameter.Add(DotCMIS.SessionParameter.Password, password);
parameter.Add(DotCMIS.SessionParameter.BindingType, DotCMIS.BindingType.WebServices);
parameter.Add(DotCMIS.SessionParameter.WebServicesAclService, (servicesUrl + "ACLService?wsdl").ToString());
parameter.Add(DotCMIS.SessionParameter.WebServicesDiscoveryService, (servicesUrl + "DiscoveryService?wsdl").ToString());
parameter.Add(DotCMIS.SessionParameter.WebServicesMultifilingService, (servicesUrl + "MultiFilingService?wsdl").ToString());
parameter.Add(DotCMIS.SessionParameter.WebServicesNavigationService, (servicesUrl + "NavigationService?wsdl").ToString());
parameter.Add(DotCMIS.SessionParameter.WebServicesObjectService, (servicesUrl + "ObjectService?wsdl").ToString());
parameter.Add(DotCMIS.SessionParameter.WebServicesPolicyService, (servicesUrl + "PolicyService?wsdl").ToString());
parameter.Add(DotCMIS.SessionParameter.WebServicesRelationshipService, (servicesUrl + "RelationshipService?wsdl").ToString());
parameter.Add(DotCMIS.SessionParameter.WebServicesRepositoryService, (servicesUrl + "RepositoryService?wsdl").ToString());
parameter.Add(DotCMIS.SessionParameter.WebServicesVersioningService, (servicesUrl + "VersioningService?wsdl").ToString());
parameter.Add(DotCMIS.SessionParameter.RepositoryId, (repositoryId));
/*Configuro el tiempo valido para lecturas*/
/*Esta configuración la obtengo desde el archivo de configuración (web.Config)*/
parameter.Add(DotCMIS.SessionParameter.ReadTimeout, System.Configuration.ConfigurationManager.AppSettings["ReadTimeout"].ToString());//infinito
/*Obtengo el tamaño del mensaje*/
/*Esta configuración la obtengo desde el archivo de configuración (web.Config)*/
parameter.Add(DotCMIS.SessionParameter.MessageSize, System.Configuration.ConfigurationManager.AppSettings["MessageSize"].ToString());//20mb
ISessionFactory factory = DotCMIS.Client.Impl.SessionFactory.NewInstance();
return factory.CreateSession(parameter);
}
Paso 8:
Para limpiar la sesión, creamos un método llamado: "CloseConnection" de acceso privado.private void CloseConnection(ISession session)
{
try
{
/*Sí la sesión es distinto a null, la limpio. En caso contrario no hago nada*/
if (session != null)
{
session.Clear();
}
}
catch(Exception error)
{
/*En caso de algún error, lanzo excepción*/
throw new Exception("Ha ocurrido un error al cerrar la conexión.", error);
}
}
Paso 9:
Para comunicar nos con nuestra clase y los métodos alojados en ella; creamos un método tipo constructor con el mismo nombre de la clase "CMISIntegrationRepository"public CMISIntegrationRepository()
{
CreateConnection();
}
Conclusión
Con esta clase podremos conectarnos vía CMIS a Alfresco, mediante la librería DOTCMIS. La idea es no crear una sesión a cada rato; por lo tanto sí guardamos la sesión en una variable estática y privada a la clase; y mediante el método "CreateConnection" que usamos para verificar sí es null o no; nos aseguramos de crear una sesión solo cuando así lo necesitemos.En otra entrada, les explicaré como realizar búsquedas y lecturas de documentos desde nuestra aplicación hacía Alfresco.
Les comparto una imagen con el diagrama de funcionamiento de esta clase y sus métodos.
Comentarios
Publicar un comentario