C# 自动将测试项目连接到WCF服务

C# 自动将测试项目连接到WCF服务,c#,.net,wcf,azure,C#,.net,Wcf,Azure,我已经编写了一个打算在Azure中运行的WCF web服务(不是网站,只是HTTP上的JSON)。我需要为它编写测试 我知道怎么做,但这似乎很业余: 运行web服务 复制根URL(例如http://localhost:81/) 将根URL应用于我的测试项目 运行测试项目 我希望能够做到这一点: 按F5键 -->web服务开始运行 -->测试开始运行,自动查找IIS决定运行服务的位置 有办法吗?修复WCF项目的端口号:转到项目的属性,将“使用动态端口”设置为false,然后指定一个固定的端口号,例

我已经编写了一个打算在Azure中运行的WCF web服务(不是网站,只是HTTP上的JSON)。我需要为它编写测试

我知道怎么做,但这似乎很业余:

  • 运行web服务
  • 复制根URL(例如
    http://localhost:81/
  • 将根URL应用于我的测试项目
  • 运行测试项目
  • 我希望能够做到这一点:

  • 按F5键
  • -->web服务开始运行
  • -->测试开始运行,自动查找IIS决定运行服务的位置

  • 有办法吗?

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

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


    我希望这能满足您的需要…

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

    var endpoint = RoleEnvironment.Roles["WebRole1"].Instances.First().InstanceEndpoints["Endpoint1"];
    var siteUrl = String.Format("{0}://{1}", endpoint.Protocol, endpoint.IPEndpoint);
    
    此代码将获取名为WebRole1的角色,获取此角色的第一个实例(您可以使用此实例测试您的web服务是否支持负载平衡),并获取实例端点。实例端点将为您提供所需的所有信息,如协议(http/https)和IP/端口(这些是您在ServiceConfiguration中配置的内容)

    注意:这也适用于在模拟器之外运行的进程(如测试项目)。您只需参考Microsoft.WindowsAzure.ServiceRuntime即可


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

    当然这会使它们都运行,但“将它们配置为使用相同的魔法端口号”不是自动的。端口号不再“神奇”,因为您在WCF项目中指定了它,对吗?我希望这可能是因为
    rake test:functional
    正是这样做的。为了它的价值。