如何在Azure上以编程方式托管wcf服务

我想在Azure上承载一个wcf服务,但这个实例化必须是动态的,所以我想根据需要实例化新的服务,但是......

new ServiceHost(new Service(),<<What the heck is the base URI!?>>)

什么应该是基础Uri(计划,服务器名称和端口):

  • 工人角色
  • 网络角色
  • 外部端点
  • 内部终点。 (出于性能原因,某些服务需要在负载平衡器后面彼此交谈,但是怎么做?)
  • 这些也是可能的:

  • 每个Web角色有多个服务主机。
  • 变化的端点绑定即。 我希望在Http上有一个servicehost,如果有的话,我需要在部署时在csdef文件中声明这两个协议,或者可以根据需要以编程方式添加它们(又名。late bind)?
  • 我正在寻找一个解决方案,不涉及ServiceBus的$$$原因。


    无论是在Web角色还是工作角色实例上,这种方法都是一样的,因为它们本质上都是Windows 2008 Server(只是Web角色具有运行IIS的功能,这也会占用几个端口)。 无论您希望将wcf服务挂在哪个端口上,只需将它们定义为输入端点(每个端口一个端点),并决定哪个角色处理该端点。

    只要你有可用的端口,你可以有多个ServiceHosts。 目前,您每次部署限制总共25个输入端点和25个内部端点总数,因此这是您的绝对限制。 当然,如果启用RDP,则可用端口数会下降。 哦:关于协议:如果你想要http和tcp,你需要定义两个端点,因为协议是用端点定义来定义的。

    内部端点WCF服务几乎完全相同,但您可以放弃安全性并使用net.tcp进行快速传输。 负载平衡的一个不同之处在于:

  • 悬挂在输入端点上的WCF服务将在所有角色的实例中进行负载均衡
  • 挂在内部端点上的WCF服务将不会进行负载平衡。
  • 对于后一种情况:假设您的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)?