首页 > 解决方案 > ASP.Net Web.config 客户端端点名称

问题描述

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

我正在使用precompile 指令在语句#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 或其他方式)。

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

标签: asp.netwcfiisweb-config

解决方案


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

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

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

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

可能的解决方案

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

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

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


推荐阅读