我编写了一个旨在在 Azure 中运行的 WCF Web 服务(不是网站,只是基于 HTTP 的 JSON)。我需要为它编写测试。
我知道怎么做,但看起来很业余:
- 运行网络服务,
- 复制根 URL(例如
http://localhost:81/
) - 将根 URL 应用到我的测试项目,
- 运行测试项目。
我希望能够做到这一点:
- 按 F5
- --> web 服务开始运行
- --> 测试开始运行,自动查找 IIS 决定运行服务的位置。
有办法吗?
有两种方法可以做到这一点。由于您使用的是 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。
Besides that you can also try to use the ServerManager class to find the current sites running in IIS, but I don't think this will work if you're running in IIS Express (which is also possible if you're working with Azure).
修复 WCF 项目的端口号:转到项目的属性,将“使用动态端口”设置为 false,然后指定一个固定数字,例如 81。
在您的解决方案中指定多个启动项目:在解决方案上单击鼠标右键:选择“设置启动项目”,然后选中单选按钮“多个启动项目”,将您的 WCF 服务项目包括在启动列表中。
我希望这能满足您的需求...