动态更改Web API的配置文件找不到服务端点

时间:2014-07-23 14:50:08

标签: web-services wcf asp.net-web-api config

我正在尝试将配置文件交换进我的web api以与不同的WCF Web服务进行交互。我在以下链接中找到了在运行时更改我的webconfig文件的解决方案。

Config Swapper Class

当从我的新配置文件中替换命令行应用程序调用但是当我从我的API调用配置文件转换器时,这很有效我得到以下错误。

“无法在ServiceModel客户端配置部分找到引用合同'OldDominionWebServices.RateDelegate'的默认端点元素。这可能是因为找不到您的应用程序的配置文件,或者因为找不到与此合同匹配的端点元素客户元素。“

这是我尝试引用的端点

<endpoint address="https://www.odfl.com:443/wsRate_v4/RateService" binding="basicHttpBinding" bindingConfiguration="RatePortBinding" contract="OldDominionWebServices.RateDelegate" name="OldDominionWebServices" />

我知道错误说的是什么,但我不确定为什么会在交换配置文件的web api中抛出它,但在使用执行相同操作的控制台应用程序时不会抛出。对于命令行应用程序,使用此Web服务的程序集作为解决方案的一部分被引用,其中与api一样,程序集通过反射加载。我已经看到一些建议,我需要在端点的合同中使用完全限定的域名,但这仍然会导致相同的错误。

我希望这是我忽略的一些简单的事情,提前谢谢!

1 个答案:

答案 0 :(得分:1)

好问题!
简答:
您无法交换配置,因为Web应用程序使用AppDomain启动时初始化时使用的配置文件层次结构,因此需要重新启动AppDomain,并且所有内存中的更改都将丢失(这就是&#34; Config Swapper Class&#34;程序集的工作方式 - 在内存中执行所有操作)。

详细说明:
我做了一些挖掘,这是我发现的:

  1. 与使用&#34; Config Swapper Class&#34;加载程序集的方式无关。装配时,没有任何东西可以受到影响。
  2. 如果您的实际配置存在于内存中,则重新启动AppDomain是没有意义的 - 所有更改都将丢失。您可能会想到除了在web.config中存储配置的位置的另一个想法?
  3. 上面提到的程序集(很棒的东西,BTW!)在控制台应用程序中工作,因为它在内部使用ConfigurationManager,它本身使用ClientConfigurationSystem实现IInternalConfigSystem接口。 Web应用程序使用WebConfigurationManager,它使用该接口的其他实现 - HttpConfigurationSystem 所以,&#34; Config Swapper Class&#34;程序集对Web应用程序没有帮助,因为它在不同的内部类集上运行。