Servicios Web, utilizando atributos
Para este artículo les traigo el uso de servicios web pero aplicando atributos para funciones específicas que requieren de este tipo de adornos.
Veamos la base conceptual en primer lugar, les voy a mostrar un servicio web simple:
[WebMethod()]
public
string Demostracion()
{
return
DateTime.Now.ToString();
}
La idea del artículo es mostrar particularmente propiedades del atributo WebMethod. Para este punto las opciones disponibles:
- Description: La propiedad Description del atributo WebMethod proporciona una descripción de un método de servicio Web XML, que aparecerá en la página de ayuda del servicio. El valor predeterminado es una cadena vacía.
- EnableSession: La propiedad EnableSession del atributo WebMethod habilita el estado de sesión en un método de servicio Web XML. Una vez habilitada esta función, el servicio Web XML puede tener acceso a la colección de estado de sesión directamente desde HttpContext.Current.Session o con la propiedad WebService.Session si se hereda de la clase base WebService.
- CacheDuration: La propiedad CacheDuration del atributo WebMethod permite el almacenamiento en caché de los resultados de un método de servicio Web XML. ASP.NET guardará en caché los resultados de cada parámetro único establecido. El valor de esta propiedad indica cuántos segundos debe almacenar ASP.NET en caché los resultados. Un valor de cero deshabilita el almacenamiento en caché de los resultados.
- TransactionOption: La propiedad TransactionOption del atributo WebMethod permite al método de servicio Web XML participar como objeto raíz de una transacción. Aunque la propiedad TransactionOption se puede establecer en cualquiera de los valores de la enumeración TransactionOption, un método de servicio Web XML sólo tiene dos comportamientos posibles: no participar en una transacción (Disabled, NotSupported, Supported), o crear una transacción nueva (Required, RequiresNew).
- BufferResponse: La propiedad BufferResponse del atributo WebMethod permite el almacenamiento en el búfer de respuestas para un método de servicio Web XML. Cuando se establece en true, el valor predeterminado, ASP.NET almacena en el búfer la respuesta completa antes de enviarla al cliente. El almacenamiento en el búfer es muy eficiente y ayuda a mejorar el rendimiento ya que minimiza la comunicación entre el proceso de trabajo y el proceso de IIS. Cuando se establece en false, ASP.NET almacena en el búfer la respuesta en fragmentos de 16KB.
El ejemplo a implementar es el uso de transacciones con un servicio web, ya que es interesante aplicar este tipo de mecanismos si es que trabajan con datos o exponen datos por medio de un servicio.
La idea es, con un ejemplo de eliminación evaluar la consistencia del atributo, para el ejemplo voy a utilizar la opción RequiresNew para generar una nueva transacción:
[WebMethod(TransactionOption = System.EnterpriseServices.TransactionOption.RequiresNew)]
Veamos el ejemplo analizado:
[WebMethod(TransactionOption = System.EnterpriseServices.TransactionOption.RequiresNew)]
public
int Transaccion(string Nombre)
{
//Cadena Correcta
String ComandoSqlCorrecto = "DELETE FROM Clientes WHERE Nombre='" + Nombre + "'";
//Cadena con error
String ComandoSqlConError = "DELETE FROM NonExistingTable WHERE Nombre='" + Nombre + "'";
//Conexion
SqlConnection myCon = new
SqlConnection("user id=user;password=pass;database=Combustible;server=.\\SQLExpress");
//Comando correcto
SqlCommand delComandoSqlCorrecto = new
SqlCommand(ComandoSqlCorrecto, myCon);
//Comando con error
SqlCommand delSqlConError = new
SqlCommand(ComandoSqlConError, myCon);
//Ejecuto el esquema correcto
delComandoSqlCorrecto.Connection.Open();
delComandoSqlCorrecto.ExecuteNonQuery();
//En este punto llamo al error, y si esta en esquema de transacciones al generar la ex, no se ven los cambios ya impactados.
int Resultado = delSqlConError.ExecuteNonQuery();
myCon.Close();
return Resultado;
}
Nota: el example es de corte academico, aclaro para no implementar en produccion ni nada que se le parezca ya que no cumple con normas de programación de esse escenario.
Cada uno de los pasos tiene su explicación, veamos en un primer escenario deshabilitando las transacciones y veremos un resultado de eliminación del registro por más que se genere un error posterior y al activar este mecanismo como lo muestra el ejemplo tendremos un mecanismo consistente para utilizar en nuestros desarrollos habituales.
Espero les sea de utilidad.
Comentarios
Publicar un comentario