51

さまざまなアセンブリで ASP .Net Web API とやり取りするアプリケーションでRavenDB-Embedded 2.0.2230を使用しました。

ドキュメント ストアを設定UseEmbeddedHttpServer = trueすると、最初に RavenDB にリクエストを送信すると正しく実行されますが、2 回目に送信しようとすると、アプリケーションに 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 を別のポートにポイントするために適用する必要がある設定はありますか?

4

2 に答える 2

12

あなたが説明した経験を再現できる唯一の方法は、意図的にポートの競合を作成することです。デフォルトでは、RavenDBのWebサーバーはポート8080でホストしているため、ravenのポートを変更しない場合は、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();
}
于 2013-01-25T16:35:36.627 に答える
2

EmbeddableDocumentStore ravenDB で HttpServer を有効にすると、Web アプリケーションが「ハイジャック」され、アプリケーションが実行されているのと同じポートでリッスンが開始されます。

Oren Eini: IIS 内から UseEmbeddedHttpServer を使用すると、IIS からポートが取得されます。値を再設定する必要があります

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

それを防ぐ唯一の方法は、raven http-server の電源を切るか、別のポートに割り当てることです。

int ravenPort = 8181;
NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(ravenPort);
var ds = new EmbeddableDocumentStore {
   DataDirectory = [DataFolder],    
   UseEmbeddedHttpServer = true,    
   Configuration = {Port = ravenPort}
};
于 2013-01-28T13:58:42.563 に答える