50 votes

Comment pourrais-je faire mon RavenDB application exécuter correctement lorsque UseEmbeddedHttpServer est définie à true en utilisant l'architecture 2 tiers?

J'ai utilisé RavenDB-Embedded 2.0.2230 dans mon application interagi avec l'ASP .Net Web API dans les différentes assemblées.

Lorsque j'ai mis en UseEmbeddedHttpServer = true sur le magasin de documents, la première fois que j'ai envoyer une demande à RavenDB, il s'exécute correctement, mais lorsque je tente pour la deuxième fois mon application affiche Raven Studio.

Quand j'enlève UseEmbeddedServer réglage, mon application s'exécute sans problème.

Mon RavenDB est configuré avec les codes suivants dans la couche de données :

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

et la mise en œuvre de l' Web.config ont ces paramètres dans le niveau de service :

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

Est-il un paramètre que j'ai manqué?

Est-il réglages que j'ai besoin de faire le point Raven Studio à un autre port?

11voto

Matt Johnson Points 33433

La seule façon que je pouvais reproduire l'expérience que vous décrivez est par le dessein de créer un conflit de port. Par défaut, RavenDB du serveur web héberge sur le port 8080, donc si vous ne modifiez pas le corbeau du port, alors vous devez être l'hébergement de votre WebApi application sur le port 8080. Si ce n'est pas le cas, s'il vous plaît laissez-moi savoir dans les commentaires, mais je vais supposer que c'est ainsi.

Tout ce que vous devez faire pour changer le port Raven utilise est de modifier la valeur du port avant d'appeler Initialize méthode.

Ajouter cette RavenConfig.cs fichier App_Startup le dossier:

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;
        }
    }
}

Puis dans votre Global.asax.cs le fichier, procédez de la manière suivante:

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

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

2voto

lboshuizen Points 1754

Lorsque vous activez le serveur http dans un EmbeddableDocumentStore ravenDB "détourne" la webapplication et commence à l'écoute sur le même port que l'application est en cours d'exécution.

Oren Eini: Lorsque vous utilisez UseEmbeddedHttpServer de l'intérieur de IIS, il prend le port à partir de IIS. Vous devez définir la valeur de la

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

La seule façon de prévenir est soit-ff le corbeau serveur http ou l'affecter à un autre port

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X