SolrNet с Виндзорским замком и базовой аутентификацией - PullRequest
0 голосов
/ 03 апреля 2012

Я использую контейнер Windsor для многоядерного доступа SolrNet, но мои ядра Solr требуют базовой аутентификации.Можно ли использовать интеграцию SolrNet Windsor с аутентификацией?

Я пробовал следующее:

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>>();

Когда я запускаю контейнер. Броски AddFacility:

Компонент SolrNet.Impl.SolrConnection не может быть зарегистрирован.Уже есть компонент с таким именем.Вы хотите изменить существующий компонент?Если нет, убедитесь, что вы задали уникальное имя.

и трассировку стека:

в Castle.MicroKernel.SubSystems.Naming.DefaultNamingSubSystem.Register (IHandlerобработчик) в Castle.MicroKernel.AddCustomComponent (модель ComponentModel, логическое значение isMetaHandler) в Castle.MicroKernel.DefaultKernel.AddCustomComponent (модель ComponentModel) в 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] базовый_интеллектуальный_применяемый:1.Работа проектов \ 1.Выполняется \ Semantic Force \ Reporting \ SFDigestGenerator \ SolrInteractionLogic \ Core \ SolrInteractServer.cs: строка 58 в SolrInteractionTest.Program.Main (String [] args) в D: \ 1.Работа проектов \ 1.Выполняется \ Semantic Force \ Reporting \ SFDigestGenerator \ SolrInteractionTest \ Program.cs: строка 26 в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, аргументы String []) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly (at) * 1018.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, логическое значение ignoreSyncCtx) в System.Threading.ExecutionContext.Run (обратный вызов ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper

Ответы [ 2 ]

2 голосов
/ 17 сентября 2012

используйте следующую строку для реализации аутентификации

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)));
2 голосов
/ 04 апреля 2012

Вы должны зарегистрироваться IHttpWebRequestFactory в контейнере, а не ISolrConnection.

...