2

我为我们的 PayPal 实现创建了一个新的 C# 项目(非 Web)。我有一堆配置字符串,如下所示,我需要找出最好的存储方式。我创建的各种包装类都在使用这些字符串。此外,这是一个可用于任何 Web 项目甚至后端的项目。所以我需要一种很好的方法来解决这些问题,以便其他应用程序不需要,并将所有这些字符串键集中在我的 PayPal C# 项目中以在那里维护它们。使用我的包装器项目的其他应用程序应该对这些字符串一无所知或需要......我的项目负责存储它们。

有了这个,在哪里?我是否在我的 C# 非 Web 项目中使用 Web.Config?我是否使用应用程序配置?我是否将它们存储在数据库中(不,坏主意)。或者我是否将它们作为常量存储在例如 Constants.cs 类中?

我也不知道将它们存储在常量类中是否安全?在我看来,我最好的选择是将 web.config 或某种配置添加到我的非 Web 项目中,然后将它们存储在那里。

4

6 回答 6

1

执行此操作的“标准”.NET 方法是创建一个 app.config 并将它们放置在那里。这些将需要复制到调用您正在编写的库项目的任何项目的 web.config 或 app.config 中。

于 2010-01-29T18:43:49.023 回答
1

只需使用 .NET 配置系统 (System.Configuration) 即可,无需担心配置设置存储在哪里。

如果您的代码用于非 Web 应用程序,则可以在应用程序的 .config 文件中配置这些设置。Web 应用程序将使用 web.config。

尽管名称不同,app.config 和 web.config 使用相同的 API。

于 2010-01-29T18:43:55.217 回答
1

我们不久前做了一个 PayPal 实施。我们最终做的是将这些敏感字符串作为加密字符串存储在 web.config 中。我认为对于您的场景,您可能会考虑做类似的事情(在 web.config 中存储为加密字符串),但通过将其与仅内部网的Web 服务包装并仅授予对一个域帐户的访问权限来集中它。这确保了除了一个域帐户之外,没有人可以调用 Web 服务来获取凭证或其他 PayPal 特定对象。

于 2010-01-29T18:47:59.120 回答
1

如果字符串在编译时确定并且永远不会更改,请使用资源文件。

如果他们需要持久存储,您还可以使用系统注册表——我自己也在涉足这个,也使用资源文件来减少关键的拼写错误:

// Get key
RegistryKey appKey = Registry.CurrentUser.CreateSubKey(Resources.keyAppPath);

// Read from key
string _configStr = (string)appKey.GetValue(Resources.keyConfigStr, string.Empty);

// Write to key
appKey.SetValue(Resources.keyConfigStr, _configStr);

Resources.keyAppPath就好像"Software\[Company]\[App]"

Resources.keyConfigStr是密钥的名称。

正如其他人所提到的,如果安全性是特定数据的问题,请添加一层加密!

于 2010-01-29T18:58:51.813 回答
0

您的配置将取决于您的整体架构。如果您的消费应用程序预计对设置一无所知,那么最好创建一个类来负责检索这些设置并将它们作为显式属性输出。最好将它们放在某个版本的 web.config 中,因为这允许您修改它们而无需重新编译和重新部署您的应用程序。您可能还需要考虑任何源代码控制或管理不同级别的配置(开发、测试、生产、预生产等)。

我采用了一种 web.config 方法,该方法根据访问它的服务器的级别或类型创建我自己的配置部分和连接字符串部分。然后我构建了自己的“ConfigurationManager”类,它以与内置 ConfigurationManager 几乎相同的方式访问它们(因此它的使用对其他开发人员来说是透明的)。然后我的 web.config 可以在其中包含任何设置,并且可以以与 ASP.Net 配置标准一致的方式在整个企业中以相同的方式使用该类本身。任何需要设置的人都会调用 myConfigurationManager.AppSettings(key) 并根据相关服务器的级别接收适当的设置,并且配置文件的源代码控制不必在服务器之间有所不同。

同样,可以以这种方式配置 app.config 以提供扩展配置支持。

于 2010-01-29T18:45:57.690 回答
0

您可以只创建一个简单的类来保存它们,将类 xmlSerialize 到您希望其他应用程序读回同一类的任何位置。

于 2010-01-29T18:48:39.013 回答