使用ServiceHost在单元测试中托管WCF服务

时间:2011-04-26 11:31:52

标签: .net asp.net wcf unit-testing mstest

我正在尝试编写一些单元测试来测试我的WCF服务的端点,为此我想在单元测试本身而不是在IIS中托管服务。我找到了this article我已经阅读并进行了更改,所以我使用ServiceHost托管它,我可以看到单元测试正在尝试运行它但我似乎遇到了一些一个问题。

当我运行测试时,在打开服务时出现以下错误:

  

此服务需要ASP.NET   兼容性,必须托管在   IIS。在IIS中托管服务   启用ASP.NET兼容性   在web.config中或设置   AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode   属性为除以外的值   必需的。

这是由我的服务类上的以下属性设置引起的:

[AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Required )]

然后我尝试将以下内容添加到我的app.config中,但它似乎没有任何区别:

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

我有什么想法可以解决这个问题?

1 个答案:

答案 0 :(得分:10)

如错误消息所述, ASP.NET兼容模式要求将WCF服务托管在ASP.NET Web服务器

如果您希望在本地计算机上针对WCF服务运行某些集成测试,则始终可以在Visual Studio开发服务器中托管服务(a.k.a。 Cassini )。我强烈建议您查看CassiniDev,这是一个允许运行轻量级ASP.NET Web服务器的开源库,这对单元测试场景特别有用。 / p>

以下是使用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();
    }
}

相关资源: