Este artículo es la tercera parte de una serie:

¿Estás listo para escribir algo de código? En esta entrada de blog, vamos a empezar un nuevo proyecto ASP.NET MVC, añadirle el SDK de Couchbase con NuGet, y conseguir la infraestructura necesaria para empezar a usar Couchbase.

Acabo de empezar en Visual Studio con un Archivo->Nuevo, y seleccioné ASP.NET Web Application, luego seleccioné "MVC". Voy a asumir que usted tiene cierta familiaridad con ASP.NET MVC, pero si algo parece fuera de lo común para usted, por favor deje un comentario, ping me on Twittero envíeme un correo electrónico (matthew.groves AT couchbase DOT com) con sus preguntas.

Instalación de la biblioteca cliente de Couchbase

Lo primero que tenemos que hacer es añadir el cliente .NET de Couchbase. Puedes hacerlo con la interfaz de NuGet haciendo clic con el botón derecho en "Referencias", haciendo clic en "Administrar paquetes NuGet", haciendo clic en "Examinar" y buscando "CouchbaseNetClient". (Si lo deseas, puedes buscar "Linq2Couchbase" en su lugar. Instalando esto también se instalará CouchbaseNetClient, pero no usaré Linq2Couchbase hasta posteriores entradas en el blog).

NuGet UI for installing CouchbaseNetClient

Si prefiere la línea de comandos de NuGet, abra la consola del gestor de paquetes y escriba Install-Package CouchbaseNetClient.

NuGet Package Manager Console for installing CouchbaseNetClient

Cómo hacer que la aplicación ASP.NET se comunique con un clúster Couchbase

Ahora vamos a configurar la aplicación ASP.NET para que pueda conectarse a Couchbase. Lo primero que tenemos que hacer es localizar el Cluster de Couchbase. El mejor lugar para hacer esto es en el Global.asax.cs cuando se inicia la aplicación. Como mínimo, necesitamos especificar un nodo en el cluster, y dárselo al comando ClusterHelper. Esto sólo tiene que hacerse una vez en Inicio_de_la_aplicación. Cuando finalice la aplicación, es conveniente cerrar el archivo ClusterHelper para limpiar y desechar los recursos que no se necesitan.

Algunas notas:

  • Este código asume que estás ejecutando un nodo Couchbase en tu máquina local (localhost). Si no es así, sustitúyelo por localhost. Por ejemplo, yo tengo un nodo Couchbase corriendo en una máquina diferente en mi oficina, así que sustituiría nuevo Uri("http://192.168.1.5").
  • Tengo UseSsl establecido en false, porque no tengo un certificado funcionando en mi nodo Couchbase. Si estás accediendo a Couchbase a través de internet, puedes usar SSL para prevenir que tu tráfico de datos sea enviado en claro.

Configuración de un contenedor IoC

Una vez inicializado el ClusterHelper, podemos utilizarlo para acceder a los buckets.

Hay muchas maneras de proceder para cablear las dependencias en tu aplicación, pero a mí me gusta usar un contenedor IoC. Hay muchas herramientas IoC disponibles para .NET, pero mi favorita es StructureMap. Hay otro paquete NuGet que integra StructureMap con MVC para usted. Tras instalarlo, los objetos del controlador MVC se instanciarán a través de StructureMap. Instalar, con NuGet (UI o consola), StructureMap.MVC5.

Installing StructureMap.MVC5 with NuGet

Añadirá StructureMap a su proyecto, así como otros archivos. Uno de ellos es DefaultRegistry.cs, que configura StructureMap para que utilice las convenciones predeterminadas.

Lo que tendremos que hacer con Couchbase, es modificar ese registro para que StructureMap pueda darnos una instancia de IBucket. Un IBucket, entonces, se utiliza para interactuar con un bucket de Couchbase (obtener documentos, añadir documentos, actualizar documentos, etc.). He aquí cómo configurar un registro IBucket:

En este ejemplo:

  • Estoy usando el ClusterHelper para obtener un bucket específico (que he llamado 'hello-couchbase', pero puedes llamarlo como quieras). Asegúrate de que este bucket existe en Couchbase (puedes usar 'default' o uno de los buckets de ejemplo si configuraste uno en parte 1 de esta serie de blogs).
  • Poner una contraseña en un cubo no es obligatorio, pero es una buena idea.
  • La instancia IBucket es un singleton, porque no hay razón para tener múltiples instancias de ella.

Uso del IBucket en un controlador

Sólo para mostrar que esto funciona, sigue adelante y añade IBucket a un constructor de un controlador, digamos HomeController. StructureMap ya ha sido configurado para instanciar controladores, y ya le hemos dicho cómo instanciar un IBucket. (A la larga, probablemente no querrás usar IBucket directamente en el controlador; más sobre esto en futuras entradas del blog).

A continuación, añade un documento a tu bucket, directamente en la consola de Couchbase. Toma nota de la clave que le das.

Specifying a key for a new document in Couchbase

Creating a document in Couchbase

Ahora, añade una acción a HomeController. Esta es una acción desechable sólo para fines de demostración. Es lo más simple que se puede hacer: obtendrá el documento basado en la clave, y escribirá los valores del documento en la respuesta.

doc.Valor es del tipo dinámicoAsí que asegúrate de que los campos que utilizas (en mi caso, nombre y dirección) coinciden con el documento JSON que introduces en el bucket. Ejecute su sitio MVC en un navegador, y usted debe ver algo como esto:

Outputting the document values to a browser

Enhorabuena, has escrito con éxito un sitio ASP.NET que utiliza Couchbase. No ha sido tan difícil, ¿verdad?

Conclusión

Te he mostrado lo más básico para conectarte y usar Couchbase en ASP.NET MVC. Pero podemos hacerlo mucho mejor. En la próxima entrada del blog, voy a mostrarte cómo usar Linq2Couchbase para construir una entidad, un repositorio, y cómo usar este repositorio para hacer un sitio web con funcionalidad real. Como siempre, si necesitas ayuda con cualquier cosa, por favor deja un comentario, ping me on Twittero envíeme un correo electrónico (matthew.groves AT couchbase DOT com).

Autor

Publicado por Matthew Groves

A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviará pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribió una aplicación de punto de venta en QuickBASIC para la pizzería de sus padres, allá por los años noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.

2 Comentarios

  1. Hice todo lo que se explica aquí pero, no soy capaz de resolver el error de inyección de dependencia
    "No se ha definido ningún constructor sin parámetros para este objeto". ¿Hay que hacer algo más para el StructureMap side....?

    1. Ten en cuenta que esta entrada de blog fue escrita con Couchbase Server 4.x en mente. Si estás usando 5 o 6, es posible que ClusterHelper.OpenBucket no esté devolviendo un bucket. La autenticación cambió entre las versiones 4 y 5.

      También es posible que desee asegurarse de que está siguiendo las convenciones StructureMap, ya que uso "scan.WithDefaultConventions()" en ese ejemplo.

      Por último, desde que escribí este post, StructureMap ha dejado de utilizarse en favor de Lamar (https://jasperfx.github.io/lamar/), así que, si puede, le recomendamos que lo utilice.

Dejar una respuesta