martes, 13 de septiembre de 2016

Abortar conexión SQL SERVER desde .NET




En ocasiones, las consultas a base de datos quedan en ejecución o en espera ocupando recursos de los servidores SQL e incluso bloqueando la base de datos, por ello, es recomendable configurar el timeout para cada consulta según su tiempo de ejecución.


En el siguiente ejemplo se muestra como configurar el timeout a través de SqlCommand:

Try                                                                                         
{                                                                        
       //Consulta SQL                                                    
var sql = "SELECT * FROM USUARIO";                                       
//Conexión SQL                                                    
using (SqlConnection connection = new SqlConnection(connString))                
{                                                                 
              //Comando para ejecutar la consulta                               
              using (SqlCommand command = new SqlCommand(sql, connection))      
              {                                                                 
                        //Configuración del Timeout                             
                        command.CommandTimeout = 1; // En segundos                    
                        //Ejecución del comando                                       
                        SqlDataReader dataReader = command.ExecuteReader();           
               }                                                                
        }                                                                
}                                                                        
catch (Exception ex)                                                     
{                                                                        
     //Al generarse una excepción por exceder el timeout, automáticamente se cancela    la consulta a base de datos                               
}      

En el ejemplo anterior, se ha configurado el “CommandTimeout” en 1 segundo, si la consulta tarda más tiempo se generará una excepción y automáticamente se cancelará la consulta a nivel de aplicación y de base de datos. 

Para no dejar conexiones o consultas abiertas, es recomendable usar “using” que automáticamente, ejecuta las sentencias close y dispose.

Consideraciones:
·         Si se configura el CommandTimeout a 0, el timeout será infinito.  El tiempo de espera será el configurado en la base de datos (Generalmente 10 minutos).
·         En caso de no configurar el timeout, el valor por defecto es de 30 segundos.

Para cerrar físicamente la conexión a base de datos, se podría utilizar “ClearPool”, en el siguiente ejemplo se usa el comando dentro del catch para que cierre la conexión si se produce algún error en la aplicación.

catch (Exception ex)
{
      SqlConnection.ClearPool(connection);
}

Etiquetas:

Gestión de repositorios GIT con GITOLITE




Para la creación de repositorios, existe un archivo llamado gitolite.conf que contiene toda la información de los repositorios y los permisos según un usuario o un grupo de usuarios.

Para la gestionar los repositorios, es necesario iniciar sesión con el usuario gitolite3, para ello:
su gitolite3
[SIN CONTRASEÑA]

Ahora debemos abrir el archivo gitolite.conf:
vi ~/gitolite-admin/conf/gitolite.conf

En el archivo aparecerán los diferentes repositorios con los permisos correspondientes a usuarios o grupos de usuarios:
repo gitolite-admin     
    RW+  =   gitadmin   
                        
repo testing            
    RW+  =   @all       
                        
repo prueba             
   RW+ = usuario1       
                        


Se encuentran creados los siguientes repositorios:
  • ·         Gitolite-admin: El usuario gitadmin tiene permisos totales.
  • ·         Testing: Todos los usuarios tienen permisos totales.
  • ·         Prueba: Solo el usuario “usuario1” tiene permisos totales.


NOTA: Para crear un nuevo repositorio se deberá crear una nueva línea en el archivo con el formato que se encuentra en la imagen anterior. Los permisos para cada repositorio se configuran con los mismos comandos que Linux (R:Solo lectura, RW: Lectura y escritura, etc.)

Se deberán guardar los cambios en el archivo.

Ahora, vamos a gitolite-admin
cd ~/gitolite-admin 

Hacemos commit de los cambios efectuados:
git commit -a -m "Se ha agregado el repositorio <nombre_repo>" 

git push 






Etiquetas: ,

Clonar repositorios GIT



Para clonar un reposito de git, debemos iniciar sesión con el usuario que trabajará con el repositorio, para ello:

su <nombre_usuario>
[Ingresar contraseña]

Establecer conexión con el servidor de git:
ssh <Servidor_Git> 

Clonar el repositorio deseado:
git clone ssh://<Servidor_Git>/<Nombre_Repositorio>






Etiquetas:

Instalar GITOLITE en CentOs7


Instalar el repositorio EPEL(Extra Packages for Enterprise Linux):

## RHEL/CentOS 7 64-Bit ##
# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
# rpm -ivh epel-release-7-8.noarch.rpm

Instalar Gitolite

yum --enablerepo=epel -y install gitolite3

Para configurar Gitolite3, debemos iniciar sesión con el usuario gitolite3:
su - gitolite3
[SIN CONTRASEÑA]

Generar la clave ssh para el administrador de GIT:
ssh-keygen -f ~/.ssh/gitadmin 
gitolite setup -pk ~/.ssh/gitadmin.pub 

Configuramos el servidor de Git para el usuario:
vi ~/.ssh/config

Agregamos lo siguiente y guardamos:
host GitServer (Cambiar)
user gitolite3
hostname 10.10.8.120 (Cambiar)
port 22 (Cambiar)
identityfile ~/.ssh/gitadmin

Ejecutamos los siguientes comandos:
chmod 600 ~/.ssh/config 
git config --global user.name "gitolite3" 
git config --global user.email "gitolite3@srv.world" 
git config --global push.default simple

Para finalizar clonamos el repositorio para el administrador:

git clone ssh://GitServer/gitolite-admin 






Etiquetas: , ,

Instalar GIT en CentOs7




Para instalar GIT en un servidor Linux bajo CentOs 7, debemos seguir los siguientes pasos:
Actualizamos los paquetes existentes, para que la última versión de GIT funcione correctamente:

yum -y update

Instalamos GIT:
yum -y install git

Configuramos el user.name y el user.email:
git config --global user.name "<nombre_usuario>"
git config --global user.email "<correo>"

Podemos ver la configuración de git:

git config –list






Etiquetas: ,

miércoles, 27 de abril de 2016

Configurar IIS App cmd




En ocasiones es necesario desplegar la configuración IIS de una aplicación o servicio a través de comandos app cmd.  En el siguiente ejemplo, vamos a desplegar la configuración IIS de una aplicación llamada “App” desplegada en el “Default Web Site



A continuación, se presentarán un conjunto de comandos para configurar el IIS, en los que se deberá cambiar "Default Web Site/App" por el nombre de la aplicación que se deseamos configurar.

Autenticación:
·         Autenticación Windows (Windows Authentication):
appcmd unlock config /section:windowsAuthentication
appcmd set config "Default Web Site/App" /section:windowsAuthentication /enabled:true

·         Autenticación Básica (Basic Authentication):
appcmd unlock config /section:basicAuthentication
appcmd set config "Default Web Site/App" /section: basicAuthentication /enabled:true

·         Autenticación Anónima (Anonymous Authentication):
appcmd unlock config /section:anonymousAuthentication
appcmd set config "Default Web Site/App" /section:anonymousAuthentication /enabled:true

·         Autenticación Forms (Forms Authentication):
appcmd set config "Default Web Site/App" /commit:WEBROOT /section:system.web/authentication /mode:Forms


  
Certificado de cliente (SSL):

appcmd set config "Default Web Site/App" -section:system.webServer/security/access /sslFlags:"Opcion" /commit:apphost

Debemos sustituir Opcion por:
·         Sin Certificado SSL: None
·         Con Certificado SSL: Ssl
·         Aceptar Certificado: SslNegotiateCert
·         Requerir Certificado: SslRequireCert

También podremos combinar opciones, por ejemplo:
·         Con Certificado y Requerir Certificado:
appcmd set config "Default Web Site/App" -section:system.webServer/security/access /sslFlags:"Ssl, SslRequireCert " /commit:apphost
·         Con Certificado y Aceptar Certificado:
appcmd set config "Default Web Site/App" -section:system.webServer/security/access /sslFlags:"Ssl, SslNegotiateCert " /commit:apphost

Página de Inicio:

Para establecer una página de inicio en la aplicación debemos utilizar el siguiente comando:

appcmd set config "Default Web Site/App" /section:defaultDocument /enabled:true /+files.[value='NombrePaginaInicio']

Debemos sustituir 'NombrePaginaInicio' por el nombre de la página que queremos establecer como inicio (Ejemplo: Inicio.aspx, Inicio.php, etc).

Para cualquier otra configuración, envíanos un comentario con tus dudas.



Etiquetas: ,

lunes, 21 de marzo de 2016

Eliminar Elementos de Trabajo del TFS





En algunas ocasiones necesitamos eliminar un elemento de trabajo, que hemos creado con algún error.

Para ello, debemos seguir los siguientes pasos:


  1.  Abrir la consola de Visual Studio
Todos los programas -> Microsoft Visual Studio X -> Visual Studio Tools -> Símbolo de Sistema para Visual Studio X

      2. Utilizar el comando witadmin destroywi


witadmin destroywi /collection: URLColeccion /id:id

Sustituimos "URLColeccion" y "Id" con el url de la colección en la que se encuentra el elemento de trabajo que deseamos eliminar y su Id.

Ejemplo:

witadmin destroywi /collection: http://serv1:8080/tfs/Apps%20Negocio /id:4

El ejemplo anterior eliminar el elemento de trabajo con Id "4", de la colección "Apps Negocio"





Etiquetas: ,

jueves, 4 de febrero de 2016

Pasar constantes o variables del servidor a javascript




En algunos casos necesitamos pasar constantes o variables de servidor a javascript.

Por ejemplo:

Tenemos en el code behind una propiedad que deseamos pasar a javascript:

public string IDIdioma { get; set; }

El IDIdioma se declara y su valor es asignado en un aspx.cs, ahora en el .aspx debemos crear una variable en javascript y asignarle el valor de IDIdioma:

<script type="text/javascript">
       var constantes = {
              idIdioma: <%= IdIdioma %>
       }
</script>

Una vez asignado el valor a idIdiomaa través de <%= IdIdioma %> podemos utilizar la constante en cualquier .js externo.

Si tenemos funciones.js importado en nuestro aspx:

<script type="text/javascript" src="<%= Page.ResolveUrl("~/Scripts/funciones.js") %>"></script>

Podemos tener acceso a la constante con el siguiente código:

constantes.idIdioma

Así podremos pasar variables, propiedades y constantes desde el servidor a nuestros archivos javascript.



Etiquetas: ,

jueves, 29 de enero de 2015

Cadena de conexión (Connection String) Web.config (.NET – SQL SERVER)

Para conectarnos a base de datos necesitamos agregar la cadena de conexión en el web.config, y si estamos trabajando en un proyecto con múltiples entornos, es posible, que tengamos una base de datos de desarrollo, mantenimiento y producción.

En el siguiente ejemplo, tendremos tres (3) cadenas de conexión que agregaremos en el web.config:

<connectionStrings>
    <add name="Desarrollo" connectionString="<Cadena-de-conexion>"/>
    <add name="Mantenimiento" connectionString="<Cadena-de-conexion>"/>
    <add name="Produccion" connectionString="<Cadena-de-conexion>"/>
</connectionStrings>

Ahora podemos ingresar cada uno de nuestras cadenas de conexión como un appSettings

<appSettings>
    <add key="EntornoDesarrollo" value="Desarrollo"/>
    <add key="EntornoMantenimiento" value="Mantenimiento"/>
    <add key="EntornoProducción" value="Producción"/>
</appSettings>

Y para obtener la cadena de conexión de la base de datos que deseemos:

String entornoDesarrollo;
String entornoMantenimiento;
String entornoProducción;
String cadenaConexion;

//Entorno de desarrollo
entornoDesarrollo = ConfigurationManager.AppSettings["EntornoDesarrollo"];
cadenaConexion = ConfigurationManager.ConnectionStrings[entornoDesarrollo].ConnectionString;
//Entorno de mantenimiento
entornoMantenimiento = ConfigurationManager.AppSettings["EntornoMantenimiento"];
cadenaConexion = ConfigurationManager.ConnectionStrings[entornoMantenimiento].ConnectionString;
//Entorno de producción
entornoProducción = ConfigurationManager.AppSettings["EntornoProducción "];
cadenaConexion = ConfigurationManager.ConnectionStrings[entornoProducción].ConnectionString;

Etiquetas: , ,

martes, 20 de enero de 2015

Importar librerías - .NET MVC RAZOR

Para importar librerías en un proyecto de .NET MVC RAZOR, es muy recomendable utilizar Url.Content para resolver las rutas relativas.

A continuación el ejemplo:

Si queremos importar una librería de JQuery:
<script src="@Url.Content("~/Scripts/jquery-1.8.2.intellisense.js")"></script>

Si queremos importar un archivo css:
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" />

Así nos olvidamos de jugar con rutas relativas y mucho menos, de poner rutas absolutas.

Etiquetas: ,

_Layout.cshtml - .NET MVC RAZOR

Cuando empezamos un proyecto web en .NET MVC, y comenzamos a diseñar nuestras vistas debemos saber que es el _Layout.

De una manera sencilla, el _Layout es una página maestra (Padre) de la cual descienden todas las vistas (Hijos) que deseemos.

Si por ejemplo, queremos que el header y footer aparezcan en nuestras todas nuestras vistas, no es necesario copiar y pegar en cada una de ellas.  Para ello, declaramos nuestro header y footer en el _Layout y creamos nuestras vistas utilizando de página maestra al _Layout.

Por ejemplo:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta charset="utf-8" />
    <title>@ViewBag.Title - Mi aplicación ASP.NET MVC</title>
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
    <link href="//netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
    <meta name="viewport" content="width=device-width" />
</head>
<body>
    <div id="header">
        <h3>Mi aplicación .NET MVC</h3>
    </div>
    <div id="body">
        <div class="content-wrapper main-content clear-fix">
            @RenderBody()
        </div>
    </div>
    <div id="footer">
        <div class="content-wrapper">
            <div class="float-left">
                <p>&copy; @DateTime.Now.Year - Mi aplicación ASP.NET MVC</p>
            </div>
        </div>
    </div>
</body>
</html>


Como podemos ver, tenemos nuestro _Layout con el header, body y footer.

Ahora... En que parte del _Layout se hace referencia al contenido de nuestras vistas? En @RenderBody()

Al cargar una vista por pantalla, el _Layout siempre tendrá fijo el header y el footer, mientras que el body irá cambiando según la vista que se muestre a través del @RenderBody()

Etiquetas: ,

Diferencias entre ViewBag y ViewData - .NET MVC RAZOR

Cuando nos iniciamos en .NET MVC , surge la primera duda... Pasar datos desde el controlador a la vista.

Para ello debemos conocer ViewData y ViewBag, que son "sacos" para pasar información entre el controlador y la vista.

Ahora veamos un ejemplo para el controlador "Index":

public ActionResult Index()
        {
            ViewBag.Mensaje= "Mi primer mensaje en MVC";
            ViewData["Mensaje"] = "Mi primer mensaje en MVC";


            return View();
        }

Ahora, tenemos dos opciones para pasar el mismo valor. Que utilizamos? ViewBag ó ViewData?

Aunque ambas tienen la misma funcionalidad, suelo utilizar el ViewBag por dos razones:

  1. El código queda más limpio y es más rápido de escribir, evitando corchetes [].
  2. El ViewData es de tipo Object y hay que hacer cast en la vista para utilizarlo, mientras que el ViewBag se genera dinámicamente con el tipo de dato asignado.
Ahora, para completar el ejemplo veamos la vista:

<p>@ViewBag.Mensaje</p>
<p>@ViewData["Mensaje"]</p>





Etiquetas: ,

lunes, 12 de enero de 2015

Traducir al español JQuery UI - Datepicker


En muchos casos agregamos el JQuery Datepicker a nuestros proyectos y no sabemos cómo traducir los textos al español.

Para empezar, debemos tener agregado a nuestro proyecto la librería de JQuery Datepicker (http://jqueryui.com/datepicker/)

En el código HTML debemos crear un campo de texto con la clase mi-fecha (Pueden poner el nombre que deseen a la clase):

<input class="mi-fecha" name="fecha" value="" />

En el código JAVASCRIPT:

//Código para realizar las traducciones:

$(document).ready(function () {
$.datepicker.regional['es'] = {
        closeText: 'Cerrar',
        prevText: '<Ant',
        nextText: 'Sig>',
        currentText: 'Hoy',
        monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
        monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
        dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
        dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mié', 'Juv', 'Vie', 'Sáb'],
        dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'],
        weekHeader: 'Sm',
        dateFormat: 'dd/mm/yy',
        firstDay: 1,
        isRTL: false,
        showMonthAfterYear: false,
        yearSuffix: ''
    };
    $.datepicker.setDefaults($.datepicker.regional['es']);


//Código para indicar que la clase mi-fecha es un datepicker:

$(".mi-fecha").datepicker();
});


Con el ejemplo, obtendremos el calendario traducido al español.

Etiquetas: