2012-10-30 11 views
50

मैंने रावेनडीबी-एंबेडेड 2.0.2230 का उपयोग किया, मेरे आवेदन में एएसपी .Net वेब एपीआई के साथ विभिन्न असेंबली में बातचीत की।जब मैं UseEmbeddedHttpServer 2-स्तरीय आर्किटेक्चर का उपयोग करके सत्य पर सेट किया गया है, तो मैं अपना RavenDB एप्लिकेशन ठीक से निष्पादित कैसे कर सकता हूं?

जब मैं दस्तावेज़ स्टोर पर UseEmbeddedHttpServer = true सेट करता हूं, पहली बार मैं RavenDB को एक अनुरोध भेजता हूं, यह ठीक से निष्पादित करता है लेकिन जब मैं दूसरी बार कोशिश करता हूं तो मेरा एप्लिकेशन रावेन स्टूडियो प्रदर्शित करता है।

जब मैं UseEmbeddedServer सेटिंग हटा देता हूं, तो मेरा एप्लिकेशन बिना किसी समस्या के चलाता है।

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

और Web.config के कार्यान्वयन है सेवा स्तरीय में इन सेटिंग्स:

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

वहाँ एक सेटिंग मैं याद किया है

मेरे RavenDB डेटा स्तरीय में निम्नलिखित कोड के साथ कॉन्फ़िगर किया गया है?

क्या कोई सेटिंग है जो मुझे एक अलग बंदरगाह पर रावेन स्टूडियो को इंगित करने के लिए लागू करने की आवश्यकता है?

+1

@MohsenAlikhani आवंटित 'दस्तावेज़स्टोर' को तुरंत चालू करने के बाद, लेकिन इससे पहले कि आप 'प्रारंभ करें()' पर कॉल करें, आप 'documentStore.Configuration.Port = ' – GolfWolf

+0

' कॉन्फ़िगरेशन' प्रॉपर्टी RavenDB-एम्बेडेड के 'Raven.Client.IDocumentStore' के लिए अज्ञात है। अस्थिर संस्करण। –

+2

सही, यह 'IDocumentStore' इंटरफ़ेस पर नहीं है क्योंकि इसका उपयोग गैर-एम्बेडेड के लिए भी किया जाता है। यह 'एंबेडेबल डॉक्यूमेंटस्टोर 'कार्यान्वयन पर है। यदि आप 'IDocumentStore' पास कर रहे हैं, तो बस इसे वापस डालें।'((एंबेडेबल डॉक्यूमेंटस्टोर) मैस्टोर)। कॉन्फिगरेशन.पोर्ट = 8080' –

उत्तर

11

एकमात्र तरीका जिसे मैं आपके द्वारा वर्णित अनुभव को पुन: पेश कर सकता हूं जानबूझकर बंदरगाह संघर्ष बना रहा है। डिफ़ॉल्ट रूप से, RavenDB का वेब सर्वर पोर्ट 8080 पर होस्ट करता है, इसलिए यदि आप रेवेन पोर्ट को नहीं बदल रहे हैं, तो आपको पोर्ट 8080 पर अपना वेबएपी एप्लिकेशन होस्ट करना होगा। यदि ऐसा नहीं है, तो कृपया मुझे टिप्पणियों में बताएं, लेकिन मुझे लगता है यह ऐसा है।

पोर्ट रेवेन का उपयोग करने के लिए आपको बस इतना करना है कि Initialize विधि को कॉल करने से पहले पोर्ट मान को संशोधित करना है। अपने Global.asax.cs फ़ाइल में

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

फिर, निम्न करें::

अपने App_Startup फ़ोल्डर को यह RavenConfig.cs फ़ाइल जोड़ें

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

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

@MohsenAlikhani क्या इससे समस्या हल हुई? यदि ऐसा है, तो कृपया इसे उत्तर के रूप में चिह्नित करें। धन्यवाद। –

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। –

2

जब आप एक EmbeddableDocumentStore ravenDB में HttpServer सक्षम "hijacks" वेबप्लिकेशंस और उसी पोर्ट पर सुनना शुरू करता है जो एप्लिकेशन चल रहा है।

Oren ईइनी: आप आईआईएस अंदर से UseEmbeddedHttpServer उपयोग करते हैं, यह आईआईएस से बंदरगाह लेता है। आप मूल्य निर्धारित करने की आवश्यकता फिर से

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

यह को रोकने के लिए एक ही रास्ता पर

या तो बारी एफएफ काला कौआ http सर्वर या एक अलग बंदरगाह के लिए यह

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