SolrNet与温莎城堡和基本认证

本文关键字:认证 城堡 SolrNet | 更新日期: 2023-09-27 18:29:45

我使用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.SubSystem.Naming.DefaultNamingSubSystem.Register(IHandler处理程序)Castle.MicroKernel.DefaultKernel.Castle.Microckernel.IKernelInternal.RegisterHandler(字符串name,IHandler处理程序,布尔skipRegistration)Castle.MicroKernel.Handlers.DefaultHandlerFactory.Create(ComponentModel模型,布尔isMetaHandler)Castle.MicroKernel.DefaultKernel.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](IEnumerable`1coreUrls、String-baseHttpUrl)。工作项目'' 1。在里面进度''语义Force''Reporting''SFDigestGenerator''SolrInteractionLogic''Core''SolrInteractServer.cs:line58,位于D:''1中的SolrInteractionTest.Program.Main(String[]args)。工作项目'' 1.进行中''语义Force '' Reporting '' SFDigestGenerator''SolrInteractionTest''Program.cs:line26在System.AppDomain_nExecuteAssembly(RuntimeAssembly assembly,字符串[]args)Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext,ContextCallback回调,对象状态,布尔值ignoreSyncCtx)System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext、ContextCallback回调、对象状态)System.Threading.ThreadHelper.ThreadStart()

SolrNet与温莎城堡和基本认证

您必须在容器中注册IHttpWebRequestFactory,而不是ISolrConnection

使用以下行实现身份验证

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