2011-04-26 41 views
7

我正在嘗試編寫一些單元測試,測試我的WCF服務的端點,並執行此操作我希望在單元測試本身而不是IIS中承載服務。我發現this article,我已經讀過並做了更改,因此我使用ServiceHost託管它,我可以看到單元測試正在嘗試運行它,但似乎遇到了一些問題。使用ServiceHost在單元測試中託管WCF服務

當我運行測試,我得到以下錯誤在打開服務點:

此服務需要ASP.NET 兼容性,必須 IIS託管。任一主機與ASP.NET兼容性IIS 服務web.config中開啓 或設置 AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode 屬性比 所需的其他值。

這是由以下屬性造成了我的服務類設置:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 

我已經然後嘗試添加以下到我的app.config,但它似乎並沒有任何區別:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

任何想法如何能通過這個問題?

+1

這很容易解決:只是刪除e ASP.NET兼容性要求。不,認真:你應該。 – 2011-04-26 13:03:15

+0

最後我做到了,只是刪除了屬性。我擔心我不知道它首先出現在那裏的確切原因,但我想這就是爲什麼我們要進行單元測試,CI和每晚構建! :) – Penfold 2011-04-27 21:00:06

+0

當你開始缺少'HttpContext'時,你會需要它;)當然,自託管不在窗口中! – 2012-10-31 19:03:58

回答

10

正如錯誤消息所述,ASP.NET兼容模式要求將WCF服務託管在ASP.NET Web服務器中。

如果你想你的本地計算機上運行對WCF服務的一些集成測試,你可以隨時主機在Visual Studio開發服務器(又名卡西尼)服務。我強烈建議你看看CassiniDev,這是一個開放源代碼庫,允許在過程中運行一個輕量級ASP.NET Web服務器,這對於單元測試場景尤其有用。

這裏的MSTest的,你將如何使用使用CassiniDev在單元測試的例子:

[TestClass] 
public class MyServiceTest 
{ 
    private CassiniDevServer host; 

    [TestInitialize] 
    public void SetUp() 
    { 
     var host = new CassiniDevServer(); 
     host.StartServer(@"RelativePathToServiceProjectDir", 8080, "/", "localhost"); 
    } 

    [TestCleanup] 
    public void TearDown() 
    { 
     host.StopServer(); 
    } 
} 

相關資源:

+0

感謝您指向CassiniDev的指針,它非常酷!我試圖整合它,它在我的機器上運行時運行得很完美,但是我有問題在TeamCity下爲CI構建運行...所以我結束了選擇刪除屬性。 – Penfold 2011-04-27 21:01:28

+0

有時候更少更多:) – 2011-04-28 07:13:16

+0

你將如何去改變被測試的項目的web.config指向測試數據庫和東西? – 2012-11-01 14:42:08