gpt4 book ai didi

c# - 如何在 azure 上以编程方式托管 wcf 服务

转载 作者:太空狗 更新时间:2023-10-29 20:31:26 25 4
gpt4 key购买 nike

我想在 Azure 上托管一个 wcf 服务,但此实例化必须是动态的,因此我想根据需要实例化新服务...

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

什么应该是基本 Uri(方案、服务器名称和端口):

  1. worker 角色
  2. 网络角色
    • 外部端点
    • 内部端点。 (出于性能原因,某些服务需要在负载均衡器后面相互通信,但是如何进行通信呢?)

这些也是可能的:

  1. 每个网络角色有多个服务主机。
  2. 不同的端点绑定(bind),即。我想要一个 Http 上的服务主机,另一个 Net.tcp,如果是的话,我需要在部署时在 csdef 文件中声明这两个协议(protocol),还是可以根据需要以编程方式添加它们(也称为后期绑定(bind))?

出于各种原因,我正在寻找一种不涉及 ServiceBus 的解决方案。

最佳答案

无论是在 Web 角色还是辅助角色实例上,方法都是相同的,因为它们本质上都是 Windows 2008 Server(只是 Web 角色运行 IIS,它也消耗一些端口)。无论您想要将 WCF 服务卡在哪个端口上,只需将它们定义为输入端点(每个端口一个端点),并决定哪个角色处理该端点。

只要有可用的端口,就可以拥有多个 ServiceHost。目前,每个部署的输入端点总数不得超过 25 个,内部端点总数不得超过 25 个,因此这是您的绝对限制。当然,如果启用 RDP,可用端口数就会减少。哦:关于协议(protocol):如果您想要 http 和 tcp,则需要定义两个端点,因为协议(protocol)是使用端点定义来定义的。

内部端点 WCF 服务几乎相同,但您可以放弃安全性并使用 net.tcp 来实现快速传输。但负载平衡方面有一个区别:

  • 卡在输入端点上的 WCF 服务将在角色的所有实例之间实现负载平衡
  • 卡在内部端点上的 WCF 服务将不会进行负载平衡。

对于后一种情况:假设您的 Web 角色需要与内部端点上的辅助角色的 WCF 服务进行通信。您需要枚举所有实例,获取每个实例的 IP+端口,然后随机选择一个(或循环法,或您选择的任何方法)。下面是一个示例方法,它从给定角色和给定端点名称返回随机端点实例(代码借自 Michael Washam 的 blog ):

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 Training Kit并完成辅助角色通信动手实验,其中详细介绍了如何设置具有输入端点和内部端点的 ServiceHost。

关于c# - 如何在 azure 上以编程方式托管 wcf 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10747863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com