【问题标题】:ASP.Net Web.config client endpoint nameASP.Net Web.config 客户端端点名称
【发布时间】:2020-01-11 12:42:42
【问题描述】:

我有一个服务引用了其他服务,其中一些引用了同一服务的不同环境(例如 prod/test)。

我正在使用#if 预编译指令通过using 语句包含这些引用的不同版本。示例:

#if Debug
using ServiceTest
#else
using ServiceProd
#endif

Web.config 文件中,<client> 节点中有两个子节点。示例:

<client>
  <endpoint address="http://test.domain.com/Service"
    binding="basicHttpBinding" bindingConfiguration="Service"
    contract="ServiceTest" name="Service" />
  <endpoint address="http://prod.domain.com/Service"
    binding="basicHttpBinding" bindingConfiguration="Service"
    contract="ServiceProd" name="Service" />
</client>

Web.config 的上述部分是否有效?更准确地说,是否会因为有两个具有相同名称和绑定配置的端点而产生任何副作用?主要问题是调用了错误的端点(例如调用 prod 端点而不是 test 或其他方式)。

我们将不胜感激任何有关上述内容的指导和建议。

【问题讨论】:

  • 您尝试使用唯一的端点名称吗?
  • @SelimYıldız,没有。这个想法是,在同一时间(对 Prod 或 Test)只有一个端点引用,并且首选方法是在 Web.config 中为所有环境使用一个名称。我试图弄清楚这种方法是否会产生任何副作用。该解决方案已构建并运行良好,但我不确定是否有任何我根本不知道的陷阱,因为我是这部分功能的新手。
  • 您添加的配置元素似乎与 WCF 相关。因此,您可能应该编辑您的问题以反映这一点。

标签: asp.net wcf iis web-config


【解决方案1】:

Web.config 的上述部分是否有效?

每次运行应用程序时,CLR 都会读取 web.config 文件并将其反序列化为对象。为了反序列化 XML,它在配置文件的“configSections”部分使用类声明。 因此,“有效与否”的答案取决于“客户端”配置部分的实现。我相信这应该是您的应用程序或 nuget 库中的代码的一部分。这就是我们无法自信地回答您的原因。

更准确地说,是否会因为两个端点具有相同的名称和绑定配置而产生任何副作用?

坦率地说,我不明白这应该如何工作。第三个库应该以什么方式知道它需要加载第一个而不是第二个客户端端点?

可能的解决方案

您可以使用web.config transformation。有大量关于 .NET Framework 的此功能的资源。

  1. 最简单的方案是替换端点地址保持相同的端点名称。

  2. 另一种常见的场景是在 AppSettings 中提供不同的端点名称并保持“活动”端点名称。在这种情况下,您的代码应该首先解析端点名称,然后才是实际的端点地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-20
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多