如何在Azure上以编程方式托管wcf服务
我想在Azure上承载一个wcf服务,但这个实例化必须是动态的,所以我想根据需要实例化新的服务,但是......
new ServiceHost(new Service(),<<What the heck is the base URI!?>>)
什么应该是基础Uri(计划,服务器名称和端口):
这些也是可能的:
我正在寻找一个解决方案,不涉及ServiceBus的$$$原因。
无论是在Web角色还是工作角色实例上,这种方法都是一样的,因为它们本质上都是Windows 2008 Server(只是Web角色具有运行IIS的功能,这也会占用几个端口)。 无论您希望将wcf服务挂在哪个端口上,只需将它们定义为输入端点(每个端口一个端点),并决定哪个角色处理该端点。
只要你有可用的端口,你可以有多个ServiceHosts。 目前,您每次部署限制总共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();
}
至于设置WCF服务和相关的URI,我强烈建议您抓住最新的Windows Azure培训工具包,并通过工作人员角色通信实验室进行实验,该实验室详细介绍了如何设置ServiceHost,输入端点和内部端点。
链接地址: http://www.djcxy.com/p/59829.html上一篇: How to host wcf service programmatically on azure
下一篇: Tell me why this does not end up with a timeout error (selenium 2 webdriver)?