2014-01-29 61 views
1

由於以前的測試未關閉HttpSelfHostServer會話,因此我們正在進行單元測試失敗。當使用HttpSelfHostServer時,「URI的註冊已存在」

所以我們第二次嘗試打開到服務器的連接,我們得到這個消息:

System.InvalidOperationException : A registration already exists for URI 'http://localhost:1337/'. 

這個測試強制問題(作爲一個例子):

[TestFixture] 
    public class DuplicatHostIssue 
    { 
    public HttpSelfHostServer _server; 

    [Test] 
    public void please_work() 
    { 
     var config = new HttpSelfHostConfiguration("http://localhost:1337/"); 
     _server = new HttpSelfHostServer(config); 
     _server.OpenAsync().Wait(); 

     config = new HttpSelfHostConfiguration("http://localhost:1337/"); 
     _server = new HttpSelfHostServer(config); 
     _server.OpenAsync().Wait(); 
    } 
} 

所以newing了服務器劑量的新實例似乎殺死了以前的會話。任何想法如何強制前一屆會議的處置?

完全例外,如果有幫助?

 System.AggregateException : One or more errors occurred. ----> System.InvalidOperationException : A registration already exists for URI 'http://localhost:1337/'.  
    at 

System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at System.Threading.Tasks.Task.Wait()  
at ANW.API.Tests.Acceptance.DuplicatHostIssue.please_work() in DuplicatHostIssue.cs: line 32 
    --InvalidOperationException  
at System.Runtime.AsyncResult.End(IAsyncResult result)  
at System.ServiceModel.Channels.CommunicationObject.EndOpen(IAsyncResult result) 
at System.Web.Http.SelfHost.HttpSelfHostServer.OpenListenerComplete(IAsyncResult result) 
+0

您可以避免此問題的一種方法是使用內存中的主機來執行您的單元測試。它會讓你的測試運行得更快! –

回答

1

你可能想要寫一個Dispose方法如下圖所示,並適當地調用它來避免這個問題

private static void HttpSelfHostServerDispose() 
{ 
    if (server != null) 
    { 
     _server.CloseAsync().Wait(); 
     _server.Dispose(); 
     _server = null; 
    } 
} 

這將清除URI寄存器。