【发布时间】:2015-08-03 19:37:04
【问题描述】:
我正在尝试构建一个简单的客户端来测试内部身份验证服务。主要思想是只拥有一个简单的测试工具,以确保该服务在每个环境中都是可调用的(并成功验证)。
在调用此服务的任何客户端应用程序中,需要在App.config 中定义一些设置。主要使用的是AuthenticationService,其中包含一个值,该值是此远程身份验证服务的 URL,由客户端中包含的 DLL 读取。此 URL 对于每个环境(开发、质量保证、生产)都不同。
例如:
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=12345" >
<section name="Authenticator.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=12345" requirePermission="false"/>
<section name="RemoteAuthenticator.TokenCache.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=12345" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<RemoteAuthenticator.Properties.Settings>
<setting name="AuthenticationService" serializeAs="String">
<value>https://environment-url</value>
</setting>
</RemoteAuthenticator.TokenCache.Properties.Settings>
</applicationSettings>
我遇到的问题是构建一个能够在不同环境中调用服务进行测试的客户端。当用户向不同的环境发出请求时,需要在运行时更改设置 AuthenticationService 中 URL 的值,但我一直找不到这样做的方法。
用于调用此服务的客户端 DLL 提供了以下方式来将身份验证令牌添加到 HttpClient:
new AuthorizationHelper().AddAuthorization(httpClient);
来自 DLL 的这些方法调用服务(在客户端 App.config 中指定的 URL,并将返回的身份验证令牌添加到提供的 HttpClient 内的标头中。
这就是该服务被调用的程度,因为来自App.config 的目标环境URL 在调用该服务时被DLL 读取。 DLL 中的这些方法对我来说基本上是一个黑盒,因为我无法修改获取 URL 的方式。
到目前为止,我已尝试通过ConfigurationManager 直接访问此设置,但两种方式都显示零设置。在搞砸了一段时间后,我尝试创建多个 App.config 文件,每个环境一个,并尝试在运行时根据需要重新加载它们(如本文所述:https://stackoverflow.com/a/6151688/1428743)。最后一个解决方案有些工作,但仅适用于第一次通话。任何对不同环境的连续调用都不会使用重新加载的配置中的 URL,只使用在第一次调用服务之前加载的配置中的 URL。
有什么方法可以在运行时修改此设置,以便根据需要使用此工具调用不同的环境?
【问题讨论】:
-
您能否阐明“用户向不同环境发出请求” 的含义?用户如何调用不同的环境?
-
我只是在制作一个简单的 UI 来向不同的环境发出请求,例如每个不同的按钮。这只是一个用于测试的超级简单工具,以确保该服务在每个环境中都可以访问(并成功验证)。
-
你是指用户的环境,还是服务器?我只是对“环境”的含义感到困惑,因为看起来您是在运行服务的环境的上下文中使用它,而不是在运行测试...
-
是的,服务正在其中运行。该客户端将调用该服务,因为它存在于 Dev、QA 和 Prod 中,以确保它在每个环境中都能正常工作。客户端将仅在开发人员机器上本地运行,调用服务所在的每个环境。
-
我稍微更新了 OP 以详细说明如何从客户端调用服务。
标签: c# .net asp.net-mvc configuration app-config