2012-07-25 63 views
0

我已经编写了一个WCF Web服务(而不是一个Web站点,只是JSON over HTTP),旨在在Azure中运行。我需要为它编写测试。将测试项目自动连接到WCF服务

我知道如何做到这一点,但似乎业余:

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

我希望能够做到这一点:

  1. 按F5
  2. - > Web服务开始运行
  3. - >测试开始运行,自动寻找其中IIS决定运行这项服务。

有没有办法?

+0

我期待这是可能的原因是因为'rake test:functional'完全是这样。物有所值。 – 2012-07-25 09:16:46

回答

1

有2种方法可以做到这一点。既然你使用的是Windows Azure,我假设你正在使用模拟器。使用模拟器意味着角色环境可用,您可以获取角色,他们的实例和他们可用的端点列表。

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合作)。

0

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

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

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

+0

当然,这使得它们都运行,但“配置它们使用相同的魔术端口号”并不是真正的自动。 – 2012-07-25 09:16:03

+0

那么,由于您在WCF项目中指定了端口号,所以端口号不再是“魔术”,对吧? – 2012-07-25 09:18:13