.NET 6项目无法连接Solr 8.9 连接地址分配失败求助
.NET 6.0 项目无法连接 Solr 8.9 求助
Program.cs
... builder.Services.AddSolrNet<MySolrModel>("http://localhost:8983/solr/fast").BuildServiceProvider(); builder.Services.AddHttpContextAccessor(); // Add transients builder.Services.AddTransient<UserService>(); builder.Services.AddTransient<SolrService>(); builder.Services.AddTransient<MessageService>(); builder.Services.AddTransient<FeedbackService>(); builder.Services.AddTransient<DashboardService>(); builder.Services.AddTransient<ManagementService>(); builder.Services.AddTransient<Others>(); ...
Others.cs
public class Others { private readonly ISolrOperations<MySolrModel> _solr; public Others(ISolrOperations<MySolrModel> solr) { _solr = solr; } /// <summary> /// 检查与Apache Solr服务器的连接状态 /// </summary> /// <returns>连接成功返回True,失败返回False</returns> public bool CheckSolrConnection() { try { // 发送ping请求验证连接 _solr.Ping(); return true; } catch (Exception ex) { Console.WriteLine($"连接Solr出错: {ex.Message}"); return false; } } }
SolrService.cs(自定义)
... /// <summary> /// 向Solr服务器发起查询请求 /// </summary> /// <param name="searchString">Solr查询语句</param> /// <returns>查询结果列表</returns> public async Task<List<MySolrModel>> Search(string searchString) { if (searchString.Equals("*:*")) { var results = await _solr.QueryAsync(SolrQuery.All); return results; } else { var results = await _solr.QueryAsync(searchString); return results; } } ...
服务器端错误信息
Exception thrown: 'SolrNet.Exceptions.SolrConnectionException' in SolrNet.dll Error while connecting to Solr: Cannot assign requested address [::1]:8983 (localhost:8983) *AND* System.InvalidOperationException: The exception handler configured on ExceptionHandlerOptions produced a 404 status response. This InvalidOperationException containing the original exception was thrown since this is often due to a misconfigured ExceptionHandlingPath. If the exception handler is expected to return 404 status responses then set AllowStatusCode404Response to true. ---> System.Net.Http.HttpRequestException: Cannot assign requested address (localhost:8983) ---> System.Net.Sockets.SocketException (99): Cannot assign requested address at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken) at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token) at System.Net.Sockets.Socket.<ConnectAsync>g__WaitForConnectWithCancellation|277_0(AwaitableSocketAsyncEventArgs saea, ValueTask connectTask, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken) --- End of inner exception stack trace --- at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.AddHttp11ConnectionAsync(HttpRequestMessage request) at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.GetHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken) at SolrNet.Impl.AutoSolrConnection.GetAsStreamAsync(String relativeUrl, IEnumerable`1 parameters, CancellationToken cancellationToken) at SolrNet.Impl.SolrQueryExecuter`1.ExecuteAsync(ISolrQuery q, QueryOptions options, CancellationToken cancellationToken) at ChatbotManagement.Controllers.Services.API.SolrService.Search(String searchString) in D:\Faculdade\3-Ano\Trabalhos\PF\chatbot\ChatbotManagement\Controllers\Services\API\SolrService.cs:line 207 at ChatbotManagement.Controllers.DashboardController.UpdateDB() in D:\Faculdade\3-Ano\Trabalhos\PF\chatbot\ChatbotManagement\Controllers\DashboardController.cs:line 63 at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task) --- End of inner exception stack trace --- at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.HandleException(HttpContext context, ExceptionDispatchInfo edi) at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task) at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext) at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
补充说明
- 使用Postman执行ping和查询操作均成功
- 已在杀毒软件中添加该项目的例外规则
- 尝试过多种配置方式,均未解决问题
- 可按需提供更多相关信息
- 连接测试时Solr服务器处于运行状态,且确认连接地址正确
- 当前使用Docker环境,但Solr部署在本地机器而非Docker容器中
已尝试的配置修改
将原有代码:
builder.Services.AddSolrNet<MySolrModel>("https://localhost:8983/solr/#/ChatbotFiles");
替换为:
builder.Services.AddLogging(configure => configure.AddConsole()).AddSolrNet<MySolrModel>("https://localhost:8983/solr/#/ChatbotFiles").BuildServiceProvider();
内容的提问来源于stack exchange,提问作者c.r.t b.r
相关产品推荐
相关产品推荐

