我正在尝试编写一些单元测试来测试我的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>
我有什么想法可以解决这个问题?
答案 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();
}
}
相关资源: