c# web-applications asp.net-mvc-4 asp.net-web-api ravendb

c# - ¿Cómo podría hacer que mi aplicación RavenDB se ejecute correctamente cuando UseEmbeddedHttpServer se establece en verdadero usando la arquitectura de dos niveles?



web-applications asp.net-mvc-4 (2)

Cuando habilita HttpServer en EmbeddableDocumentStore, ravenDB "secuestra" la aplicación weba y comienza a escuchar en el mismo puerto que la aplicación se está ejecutando.

Oren Eini: cuando utiliza UseEmbeddedHttpServer desde dentro de IIS, toma el puerto de IIS. Debe volver a establecer el valor

en https://groups.google.com/forum/?fromgroups=#!topic/ravendb/kYVglEoMncw

La única manera de evitarlo es a través del servidor http del cuervo o asignarlo a un puerto diferente

int ravenPort = 8181; NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(ravenPort); var ds = new EmbeddableDocumentStore { DataDirectory = [DataFolder], UseEmbeddedHttpServer = true, Configuration = {Port = ravenPort} };

Utilicé RavenDB-Embedded 2.0.2230 en mi aplicación interactué con ASP .Net Web API en diferentes ensamblajes.

Cuando configuro UseEmbeddedHttpServer = true en el almacén de documentos, la primera vez que envío una solicitud a RavenDB, se ejecuta correctamente, pero cuando intento por segunda vez, mi aplicación muestra Raven Studio.

Cuando UseEmbeddedServer configuración de UseEmbeddedServer , mi aplicación se ejecuta sin problemas.

Mi RavenDB está configurado con los siguientes códigos en el nivel de datos:

this.documentStore = new EmbeddableDocumentStore { ConnectionStringName = "RavenDB", UseEmbeddedHttpServer = true }.Initialize();

y la implementación de Web.config tiene estas configuraciones en el nivel de servicio:

<connectionStrings> <add name="RavenDB" connectionString="DataDir=~/App_Data/RavenDatabase" /> </connectionStrings>

¿Hay algún lugar que me perdí?

¿Hay alguna configuración que deba aplicar para apuntar a Raven Studio a un puerto diferente?


La única forma en que podría reproducir la experiencia que describes es crear intencionalmente un conflicto de puerto. De forma predeterminada, el servidor web de RavenDB se aloja en el puerto 8080, por lo que si no está cambiando el puerto de Raven, debe alojar su aplicación WebApi en el puerto 8080. Si este no es el caso, hágamelo saber en los comentarios, pero asumiré que es así.

Todo lo que necesita hacer para cambiar el puerto que utiliza Raven es modificar el valor del puerto antes de llamar al método Initialize .

Agregue este archivo RavenConfig.cs a su carpeta App_Startup :

using Raven.Client; using Raven.Client.Embedded; namespace <YourNamespace> { public static class RavenConfig { public static IDocumentStore DocumentStore { get; private set; } public static void Register() { var store = new EmbeddableDocumentStore { UseEmbeddedHttpServer = true, DataDirectory = @"~/App_Data/RavenDatabase", // or from connection string if you wish }; // set whatever port you want raven to use store.Configuration.Port = 8079; store.Initialize(); this.DocumentStore = store; } public static void Cleanup() { if (DocumentStore == null) return; DocumentStore.Dispose(); DocumentStore = null; } } }

Luego, en su archivo Global.asax.cs , haga lo siguiente:

protected void Application_Start() { // with your other startup registrations RavenConfig.Register(); } protected void Application_End() { // for a clean shutdown RavenConfig.Cleanup(); }