2011-10-17 95 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 –