【问题标题】:Connecting a Test project to a WCF Service Automatically将测试项目自动连接到 WCF 服务
【发布时间】:2012-07-25 09:08:01
【问题描述】:

我编写了一个旨在在 Azure 中运行的 WCF Web 服务(不是一个网站,只是基于 HTTP 的 JSON)。我需要为它编写测试。

我知道怎么做,但看起来很业余:

  1. 运行网络服务,
  2. 复制根 URL(例如http://localhost:81/
  3. 将根 URL 应用到我的测试项目,
  4. 运行测试项目。

我希望能够做到这一点:

  1. 按 F5
  2. --> Web 服务开始运行
  3. --> 测试开始运行,自动查找 IIS 决定在何处运行服务。

有办法吗?

【问题讨论】:

  • 我希望这成为可能的原因是rake test:functional 正是这样做的。物有所值。

标签: c# .net wcf azure


【解决方案1】:

有两种方法可以做到这一点。由于您使用的是 Windows Azure,我假设您使用的是模拟器。使用模拟器意味着 RoleEnvironment 可用,并且您可以获得可用的角色、它们的实例和它们的端点的列表。

var endpoint = RoleEnvironment.Roles["WebRole1"].Instances.First().InstanceEndpoints["Endpoint1"];
var siteUrl = String.Format("{0}://{1}", endpoint.Protocol, endpoint.IPEndpoint);

此代码将获取名为 WebRole1 的角色,获取该角色的第一个实例(您可以使用它来测试您的 Web 服务是否支持负载平衡)并获取 InstanceEndpoint强>。实例端点将为您提供所需的所有信息,例如协议 (http/https) 和 IP/端口(这些是您在 ServiceConfiguration 中配置的内容)。

注意:这也适用于在模拟器之外运行的进程(例如您的测试项目)。您唯一需要做的就是参考 Microsoft.WindowsAzure.ServiceRuntime。

此外,您还可以尝试使用ServerManager 类来查找在 IIS 中运行的当前站点,但我认为如果您在 IIS Express 中运行,这将不起作用(如果您也可以这样做)正在使用 Azure)。

【讨论】:

    【解决方案2】:

    修复 WCF 项目的端口号:进入项目的属性,将“使用动态端口”设置为 false,然后指定一个固定数字,例如 81。

    在您的解决方案中指定多个启动项目:在解决方案上鼠标右键:选择“设置启动项目”,然后选中单选按钮“多个启动项目”,将您的 WCF 服务项目包含在启动列表中。

    我希望这能满足您的需求...

    【讨论】:

    • 当然这会让它们都运行,但是“将它们配置为使用相同的魔法端口号”并不是真正自动的。
    • 嗯,端口号不再是“魔法”,因为您在 WCF 项目中指定了它,对吧?
    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多