2012-04-03 20 views
0

Ich benutze Windsor-Container in SolrNet Multicore-Zugang, aber meine Solr-Kerne erfordert grundlegende Authentifizierung. Ist es möglich, SolrNet Windsor Intergation mit Authentifizierung zu verwenden?SolrNet mit Castle Windsor und Basis-Authentifizierung

Ich versuchte weiter:

static SolrInteractServer() 
    { 
     container.Register(Component.For<ISolrConnection>().ImplementedBy<SolrConnection>().DependsOn(Property.ForKey<IHttpWebRequestFactory>().Eq(new WebAuthentication("login", "password")))); 
    } 

private static WindsorContainer container = new WindsorContainer(); 

public static void RegisterFacility<T>(IEnumerable<string> coreUrls, string baseHttpUrl = null) 
    { 
     SolrNetFacility facility = null; 
     if (baseHttpUrl != null) 
     { 
      facility = new SolrNetFacility(baseHttpUrl); 
     } 
     else 
     { 
      facility = new SolrNetFacility(); 
     } 
     foreach (var httpUrl in coreUrls) 
     { 
      var coreName = "core_" + Guid.NewGuid(); 
      facility.AddCore(coreName, typeof(T), httpUrl); 
      RegisteredCores.Add(coreName, new KeyValuePair<Type, string>(typeof(T), httpUrl)); 
     } 

     container.AddFacility("solr", facility); 
    } 

    public static Dictionary<string, KeyValuePair<Type, string>> RegisteredCores = new Dictionary<string, KeyValuePair<Type, string>>(); 

Wenn ich laufen container.AddFacility wirft:

Komponente SolrNet.Impl.SolrConnection konnte nicht registriert werden. Es gibt bereits eine Komponente mit diesem Namen. Möchten Sie stattdessen die vorhandene Komponente ändern? Wenn nicht, stellen Sie sicher, dass Sie einen eindeutigen Namen angeben.

und Stapelüberwachung:

bei Castle.MicroKernel.SubSystems.Naming.DefaultNamingSubSystem.Register (IHandler handler) bei Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.RegisterHandler (String Name, IHandler Handler, Boolean skipRegistration) bei Castle.MicroKernel.Handlers.DefaultHandlerFactory.Create (Component Modell, Boolean isMetaHandler) bei Castle.MicroKernel.Defaul tKernel.AddCustomComponent (Componentmodel Modell, Boolean isMetaHandler) bei Castle.MicroKernel.DefaultKernel.AddCustomComponent (Componentmodel Modell) bei Castle.MicroKernel.Registration.ComponentRegistration 1.Castle.MicroKernel.Registration.IRegistration.Register(IKernelInternal kernel) at Castle.MicroKernel.DefaultKernel.Register(IRegistration[] registrations) at Castle.Facilities.SolrNetIntegration.SolrNetFacility.Init() in g:\prg\SolrNet\Castle.Facilities.SolrNetIntegration\SolrNetFacility.cs:line 80 at Castle.MicroKernel.Facilities.AbstractFacility.Castle.MicroKernel.IFacility.Init(IKernel kernel, IConfiguration facilityConfig) at Castle.MicroKernel.DefaultKernel.AddFacility(IFacility facility) at Castle.MicroKernel.DefaultKernel.AddFacility(String key, IFacility facility) at Castle.Windsor.WindsorContainer.AddFacility(String idInConfiguration, IFacility facility) at SolrInteractionLogic.Core.SolrInteractServer 1.RegisterFacility [T] (IEnumerable`1 coreUrls, String baseHttpUrl) in D: \ 1. Jobprojekte \ 1. In Progress \ Semantic Force \ Reporting \ SFDigestGenerator \ SolrInteractionLogic \ Core \ SolrInteractServer.cs: Zeile 58 bei SolrInteractionTest.Program.Main (String [] args) in D: \ 1. Job Projekte \ 1. Kraft \ Reporting \ SFDigestGenerator \ SolrInteractionTest \ Program.cs In Progress \ Semantic: Linie 26 an System.AppDomain._nExecuteAssembly (RuntimeAssembly Montage, String [] args) bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, Contextcallback, Objektzustand, Boolean ignoreSyncCtx) bei System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, Context Rückruf, Objektzustand) bei System.Threading. ThreadHelper.ThreadStart()

+0

@MauricioScheffer << Ich bin versucht weiter:.. 'Container.Register (Component.For () ImplementedBy () DependsOn (Property .ForKey () .Eq (new WebAuthentication (login, passsword)))); 'und dann' container.AddFacility ("solr", facility); '(wobei facility vorher erstellt und konfiguriert wurde). Dieser Code löst die Ausnahme 'Bereits für SolrConnection registriert ... ... blah blah' aus. Was mache ich falsch? – DrAlligieri

+1

Bitte geben Sie den Code als Teil der Frage ein. Veröffentlichen Sie außerdem die gesamte Ablaufverfolgung für den Ausnahme-Stack. –

+0

@MauricioScheffer << done – DrAlligieri

Antwort

2

Sie müssen IHttpWebRequestFactory im Container, nicht ISolrConnection registrieren.

+0

<< Wenn ich das tun Windsor automatisch injizieren registrierte Komponente in SolrConnection.HttpWebRequestFactory-Eigenschaft? – DrAlligieri

+0

@DrAlligieri Ja, Windsor macht es automatisch. –

+0

OK, versucht, dies später zu testen - jetzt deaktivieren wir die Authentifizierung für Arbeitszwecke. Tnx du! – DrAlligieri

2

Verwendung folgende Zeile Authentifizierung zu implementieren

container.Register(Component.For<ISolrConnection>().ImplementedBy<SolrConnection>().Named(core1Connection).DependsOn(Property.ForKey<IHttpWebRequestFactory>().Eq(new BasicAuthHttpWebRequestFactory("User", "password"))).Parameters(Castle.MicroKernel.Registration.Parameter.ForKey("serverURL").Eq(core1url)));