我想在Azure上托管一个wcf服务,但是这个实例化必须是动态的,所以我想根据需要实例化新服务但是......
new ServiceHost(new Service(),<<What the heck is the base URI!?>>)
什么应该是基础Uri(方案,服务器名称和端口):
这些也是可能的:
我正在寻找一个解决方案,因为$$$原因不涉及ServiceBus.
无论是在 Web 角色还是辅助角色实例上,方法都是相同的,因为它们本质上都是 Windows 2008 Server(只是 Web 角色运行 IIS,它也消耗一些端口)。无论您想要将 wcf 服务挂在哪个端口上,只需将它们定义为输入端点(每个端口一个端点),并决定哪个角色处理该端点。
只要有可用的端口,就可以拥有多个 ServiceHost。目前,每个部署的输入端点总数不得超过 25 个,内部端点总数不得超过 25 个,因此这是您的绝对限制。当然,如果启用 RDP,可用端口数就会下降。哦:关于协议:如果您想要 http 和 tcp,则需要定义两个端点,因为协议是使用端点定义来定义的。
内部端点 WCF 服务几乎相同,但您可以放弃安全性并使用 net.tcp 来实现快速传输。但负载平衡方面的一个区别是:
对于后一种情况:假设您的 Web 角色需要与内部端点上的辅助角色的 WCF 服务进行通信。您需要枚举所有实例,获取每个实例的 IP+端口,然后随机选择一个(或循环法,或您选择的任何方法)。下面是一个示例方法,它从给定角色和给定端点名称返回随机端点实例(代码借自 Michael Washam 的博客):
private String GetRandomServiceIP(String roleName, String endPointName)
{
var endpoints = RoleEnvironment.Roles[roleName].Instances.Select(i => i.InstanceEndpoints[endPointName]).ToArray();
var r = new Random(DateTime.Now.Millisecond);
int ipIndex = r.Next(endpoints.Count());
return endpoints[ipIndex].IPEndpoint.Address.ToString();
}
Run Code Online (Sandbox Code Playgroud)
至于设置 WCF 服务和相关 URI,我强烈建议您获取最新的Windows Azure 培训套件并完成工作人员角色通信实践实验室,其中详细介绍了有关设置 ServiceHost 的详细信息,其中包括:输入端点和内部端点。
| 归档时间: |
|
| 查看次数: |
1085 次 |
| 最近记录: |