Este artículo es la tercera parte de una serie:
- En la Parte 1 se explica cómo instalar y configurar Couchbase en Windows.
- En la Parte 2 se trató algo de la jerga de Couchbase que necesitarás conocer
¿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).
Si prefiere la línea de comandos de NuGet, abra la consola del gestor de paquetes y escriba Install-Package 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
público clase MvcApplication : Sistema.Web.HttpApplication { protegido void Inicio_de_la_aplicación() { ÁreaRegistro.RegistrarTodasLasÁreas(); FilterConfig.RegisterGlobalFilters(Filtros globales.Filtros); RouteConfig.RegisterRoutes(Tabla de rutas.Rutas); var config = nuevo ClientConfiguration(); config.Servidores = nuevo Lista { nuevo Uri("http://localhost:8091") }; config.UseSsl = falso; ClusterHelper.Inicializar(config); } protegido void Fin_aplicación() { ClusterHelper.Cerrar(); } } |
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
.
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
público clase RegistroPorDefecto : Registro { #region Constructores y destructores público RegistroPorDefecto() { Escanear( escanear => { escanear.LaCallingAssembly(); escanear.ConConveniosPorDefecto(); escanear.Con(nuevo ControladorConvención()); }); // este siguiente 'For' es lo que he añadido para Couchbase Para().Singleton().Utilice("Consigue un Couchbase Bucket", x => ClusterHelper.GetBucket("hello-couchbase", "¡Contraseña!")); } #endregión } |
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).
1 2 3 4 5 6 7 8 9 10 |
público clase InicioControlador : Controlador { privado sólo lectura IBucket _bucket; público InicioControlador(IBucket cubo) { _bucket = cubo; } } |
A continuación, añade un documento a tu bucket, directamente en la consola de Couchbase. Toma nota de la clave que le das.
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.
1 2 3 4 5 6 |
público AcciónResultado Índice() { var doc = _bucket.Visite("foo::123"); devolver Contenido("Nombre: " + doc.Valor.nombre + ", Dirección: " + doc.Valor.dirección); } |
doc.Valor
es del tipo dinámico
Así 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:
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).
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....?
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.