0

我有一个 WCF 服务,其中包含一个调用该服务的简单 Gallio 单元测试。但是,我对框架的行为感到困惑。当我第一次启动 Visual Studio 并尝试运行单元测试时,我收到以下错误:

System.ServiceModel.EndpointNotFoundException:在http://localhost:43671/MyService.svc/MyService上没有可以接受消息的端点侦听。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。---> System.Net.WebException:无法连接到远程服务器 ---> System.Net.Sockets.SocketException:无法建立连接,因为目标机器主动拒绝它 127.0.0.1:43671 错误代码:10061

但是,如果我在单元测试项目中右键单击服务引用并执行“更新服务引用”,则会出现一个弹出窗口,指出端口 43671 上的 ASP.NET 开发服务器已启动,并且单元测试工作正常。

如何将服务器启动代码添加到我的单元测试中,这样我每次想要运行单元测试时都不必“更新服务引用”?

谢谢。

4

2 回答 2

3

发生这种情况是因为运行 Visual Studio 时未启动 WCF 服务主机。一旦您尝试更新服务引用,Visual Studio 会自动启动 WCF 服务主机,之后您的服务将可以访问。

解决此问题的一种方法是在 IIS 中托管您的服务。这将确保即使 VS 未运行,也可以访问服务。

其他解决方案是向您的服务添加引用(程序集引用)并直接实例化服务类。您无需运行该服务即可对其运行单元测试。因此,如果您有一个名为的服务类,SomeServiceClass您可以在单元测试 ( SomeServiceClass instance = new SomeServiceClass()) 中创建此类的一个实例,并针对它编写断言(甚至无需托管服务)。

于 2010-09-02T12:58:29.743 回答
0

您可以使用ServiceHost自行托管服务。如果您在单元测试的启动代码中使用它,WCF 服务将托管在单元测试中。

我不确定 app.config 用于您托管的单元测试的位置。但是,您始终可以在单独的AppDomain中运行该服务并设置AppDOmainSetup.ConfigurationFile

于 2010-09-02T13:00:46.993 回答