gpt4 book ai didi

wcf - 如何在 Azure 中的 Web 角色的外部和内部终结点上托管 WCF 服务?

转载 作者:行者123 更新时间:2023-12-04 23:58:36 26 4
gpt4 key购买 nike

我目前正在 Windows Azure 中的 Web 角色上实现 WCF REST 服务,并且我正在尝试在该角色的实例之间添加一些通信,以便它们可以在某些数据发生时保持彼此更新。在 blob 存储中更新。我想要做的是在 Web 角色的外部和内部 HTTP 端点上托管相同的 WCF 服务。然而,据我所知,当托管在 IIS 中时,WCF 仅限于每个协议(protocol)一个基地址。当我为我的角色启用内部 HTTP 端点并尝试使用 WebServiceHostFactory 启动我的服务时,这是我收到的错误:

This collection already contains an address with scheme http. There can be at most one address per scheme in this collection.

Parameter name: item

我用谷歌搜索了一下,the one workaround I've seen在不同的地方建议在 web.config 中添加一个 baseAddressPrefixFilter。但是,如果我在运行应用程序之前不知道任一端点的完整 URL,我不确定如何使其正常工作。

或者,这个问题似乎仅限于 IIS 托管,那么我可以在 Azure 中使用其他可行的托管方法吗?我认为在任何 IIS 上下文或其他环境之外的自托管都不够健壮/安全,但我不确定。

有谁知道如何解决这个问题吗?想要在 Web 角色的两个端点上托管 Web 服务似乎是很常见的事情。我对 WCF 比较陌生,因此可能缺少一些明显的东西。如有任何帮助,我们将不胜感激。

最佳答案

周五我终于明白了这一点。稍后我将尝试给出更详细的答案和/或关于此问题的博客,但现在,这里是我提出的解决方案的摘要:

  • 我的 web.config 文件中根本没有 system.serviceModel 部分。您可能可以通过 web.config 配置其中的某些部分,但在代码中完成这一切对我来说更容易。
  • 每个端点都必须有自己的服务。当两个端点使用相同的协议(protocol)(在本例中为 HTTP)并且您尝试在 IIS 上托管时,实际上没有简单的方法可以解决此问题。
  • 每个服务都必须有自己的 .svc 文件。我听说在 IIS 中托管不需要 .svc 文件,但如果这是真的,我还没有看到任何其他方法可以使其工作。
  • 每个服务还有自己的自定义服务主机工厂。在工厂中,创建主机时,我使用了基地址参数,其端口与我想要使用的端点相匹配。有人告诉我这个基地址实际上并不重要,但我自己不能保证这一点。然后在创建端点时,只需使用空字符串作为端点地址即可。
  • 由于我想创建 REST 服务,因此通常会使用 WebServiceHost,但这会导致一些各种问题,因此我只是使用 ServiceHost 并手动将 WebHttpBinding 和 WebHttpBehavior 添加到端点。
  • 最后,当从外部服务调用内部服务时,我必须确保使用新的操作上下文范围来包围该调用,如下所示:

using (new OperationContextScope((IContextChannel)myClientFromChannelFactory))
{
myClientFromChannelFactory.MyServiceMethod();
}

我问了similar question on the MSDN Windows Azure forums并在那里获得了一些信息,因此那里可能会有一些更有用的信息。

希望对遇到同样问题的其他人有所帮助。

关于wcf - 如何在 Azure 中的 Web 角色的外部和内部终结点上托管 WCF 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2142457/

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