Подтвердить что ты не робот

Как я могу сделать свое приложение RavenDB правильно, когда UseEmbeddedHttpServer установлено в true с использованием двухуровневой архитектуры?

Я использовал RavenDB-Embedded 2.0.2230 в моем приложении, взаимодействовавшем с ASP.Net Web API в разных сборках.

Когда я устанавливал UseEmbeddedHttpServer = true в хранилище документов, первый раз, когда я отправляю запрос в RavenDB, он выполняется правильно, но когда я пытаюсь во второй раз, мое приложение отображает Raven Studio.

Когда я удаляю параметр UseEmbeddedServer, мое приложение запускается без каких-либо проблем.

Мой RavenDB настроен со следующими кодами в уровне данных:

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

а реализация Web.config имеет следующие настройки в уровне обслуживания:

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

Есть ли уставка, которую я пропустил?

Есть ли какие-либо настройки, которые мне нужно применить к точке Raven Studio для другого порта?

4b9b3361

Ответ 1

Единственный способ воспроизвести описанный вами опыт - это намеренно создать конфликт портов. По умолчанию веб-сервер RavenDB размещается на порту 8080, поэтому, если вы не меняете порт ворона, вы должны разместить приложение WebApi на порту 8080. Если это не так, сообщите мне в комментариях, но я буду считать что это так.

Все, что вам нужно сделать, чтобы изменить использование порта Raven, - это изменить значение порта перед вызовом метода Initialize.

Добавьте этот RavenConfig.cs файл в папку 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;
        }
    }
}

Затем в файле Global.asax.cs сделайте следующее:

protected void Application_Start()
{
    // with your other startup registrations
    RavenConfig.Register();
}

protected void Application_End()
{
    // for a clean shutdown
    RavenConfig.Cleanup();
}

Ответ 2

Когда вы включаете HttpServer в EmbeddableDocumentStore, ravenDB "захватывает" веб-приложение и начинает прослушивать тот же порт, на котором запущено приложение.

Орен Эини: Когда вы используете UseEmbeddedHttpServer из IIS, он принимает порт от IIS. Вам нужно снова установить значение

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

Единственный способ предотвратить это - либо перевернуть http-сервер raven, либо назначить его другому порту

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