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()
您必须在容器中注册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)));