2011-10-17 47 views
2

如何扩展/修改用于SolrConnection对象的超时值?如何在SolrConnection中扩展超时? (SolrConnectionException:操作已超时)

我有一个长时间运行的优化操作,并未在提供的默认连接超时内完成。我正在使用的操作是ISolrOperations<?>.Optimize()。我没有看到任何直接使用ISolrOperations对象增加超时的选项。

我正在使用Castle Windsor IoC容器进行实例化,以便拥有多个内核。

以下是完整的堆栈跟踪:

SolrNet.Exceptions.SolrConnectionException: The operation has timed out ---> System.Net.WebException: The operation has timed out 
    at System.Net.HttpWebRequest.GetResponse() 
    at HttpWebAdapters.Adapters.HttpWebRequestAdapter.GetResponse() in c:\prg\SolrNet\svn\HttpWebAdapters\Impl\HttpWebRequestAdapter.cs:line 36 
    at SolrNet.Impl.SolrConnection.GetResponse(IHttpWebRequest request) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 201 
    at SolrNet.Impl.SolrConnection.PostStream(String relativeUrl, String contentType, Stream content, IEnumerable`1 parameters) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 113 
    --- End of inner exception stack trace --- 
    at SolrNet.Impl.SolrConnection.PostStream(String relativeUrl, String contentType, Stream content, IEnumerable`1 parameters) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 121 
    at SolrNet.Impl.SolrConnection.Post(String relativeUrl, String s) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 87 
    at SolrNet.Commands.OptimizeCommand.Execute(ISolrConnection connection) in c:\prg\SolrNet\svn\SolrNet\Commands\OptimizeCommand.cs:line 76 
    at SolrNet.Impl.SolrBasicServer`1.Send(ISolrCommand cmd) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 96 
    at SolrNet.Impl.SolrBasicServer`1.SendAndParseHeader(ISolrCommand cmd) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 106 
    at SolrNet.Impl.SolrBasicServer`1.Optimize(CommitOptions options) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 69 
    at SolrNet.Impl.SolrServer`1.Optimize() in c:\prg\SolrNet\svn\SolrNet\Impl\SolrServer.cs:line 206 
    at NationalLaborRelations.SearchAgent.SearchAgentBase.Optimize(ISolrOperations`1 s) in C:\PROJECTS\NLRB\Search\SearchAgent\SearchAgent\SearchAgentBase.cs:line 354 

注意,优化并成功地发生,但SolrNet不等待它抛出这个错误之前完成。

+0

您是否在使用内置的IoC容器?或与另一个整合? –

+0

我对多个内核使用Windsor容器。 –

+0

你可以在这个问题上添加一点细节吗? –

回答

3

您可以安全地忽略此超时。正如你已经发现的那样,该命令无论如何都可以在Solr上成功运行。

或者,如果你想设置连接超时你可以在温莎一个组件模型事件进行配置:

var c = new WindsorContainer(); 
c.Kernel.ComponentModelCreated += model => { 
    if (model.Implementation == typeof(SolrConnection)) 
     model.Parameters.Add("Timeout", "200000"); 
}; 
c.AddFacility("solr", new SolrNetFacility("http://localhost:8983/solr")); // or whatever 

超时值以毫秒为单位。

+0

这不适合我。你确定这是参数名吗?该手术需要约。 3分钟,大约过后超时。 100秒使用上述值。 –

+0

@unicron:刚刚测试过,适用于我:https://github.com/mausch/SolrNet/commit/21e3001a8d5227a6b12cd122bc79a001446036fe –

+0

确认,谢谢。超时值以毫秒为单位,我认为它是秒。参考:http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout.aspx –