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

Web services 动态更改Web API的配置文件找不到服务端点,web-services,wcf,asp.net-web-api,config,Web Services,Wcf,Asp.net Web Api,Config,我试图在web api中交换配置文件,以便与不同的WCF web服务交互。我在下面的链接中找到了在运行时更改webconfig文件的解决方案 当在我的新配置文件中从命令行应用程序调用时,这非常有效,但是当我从API调用配置文件转换器时,我得到以下错误 在ServiceModel客户端配置节中找不到引用约定“OldDominionWebServices.RateDelegate”的默认终结点元素。这可能是因为找不到应用程序的配置文件,或者在客户端元素中找不到与此约定匹配的终结点元素 这是我试图引

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

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

在ServiceModel客户端配置节中找不到引用约定“OldDominionWebServices.RateDelegate”的默认终结点元素。这可能是因为找不到应用程序的配置文件,或者在客户端元素中找不到与此约定匹配的终结点元素

这是我试图引用的端点

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

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

好问题
简短回答:
您不能交换配置,因为web应用程序使用的配置文件层次结构在AppDomain启动时用于初始化,因此这将需要重新启动AppDomain,并且所有内存中的更改都将丢失(这就是“配置交换程序类”的方式)程序集要工作-在内存中执行所有操作)。

详细信息:
我做了一些挖掘,以下是我的发现:

  • 它与使用“配置交换程序类”程序集加载程序集的方式无关,没有任何东西会受到此影响。
  • 如果您的实际配置保存在内存中,则重新启动AppDomain没有意义-所有更改都将丢失。除了web.config之外,您可能会想到另一种存储配置的方法?
  • 上面提到的程序集(很棒的东西,顺便说一下!)在控制台应用程序中工作,因为它在内部使用,而控制台本身使用接口的实现。Web应用程序使用,即使用该接口的其他实现-。
    所以,“配置交换程序类”程序集在web应用程序中不会有帮助,因为它在不同的内部类集上运行

  • 所以你想从你的Web API代码中交换配置文件?没错是的,在程序集调用期间,配置文件被交换为程序集特定的配置文件。可能是因为您正在使用新配置的相对路径,而在交换时找不到它?它实际上是一个绝对路径。问题似乎是配置文件实际上没有被交换出去。我可以把端点放进API的web配置文件中,它就可以工作了,问题是我想避免这种情况,因为系统有大约400个不同的端点可以使用。你试过调试它吗?AppDomain.CurrentDomain.GetData(“APP_CONFIG_文件”)显示了什么?我实际上害怕这个答案,但它是正确的,那么你能做什么呢?谢谢你的帮助。是的,这很悲伤,因为动态切换配置的想法非常有趣。