我有一个连接到不同数据库的应用程序,具体取决于构建配置。在#DEBUG中,我访问测试数据库,在#RELEASE中,我访问生产系统。这通常按预期工作,但有时我似乎接收测试数据,虽然是在#RELEASE或其他方式。
应用程序使用WCF连接来连接到处理数据库访问的Web Service。如果程序是使用#DEBUG构建的,则WCF连接使用不同的身份验证数据来区分模式。
public static DBUpdaterClient CreateWebServiceInstance(ApplicationType appType)
{
ServicePointManager.ServerCertificateValidationCallback += EasyCertCheck;
switch (appType)
{
case ApplicationType.xxx:
return new DBUpdaterClient
{
ClientCredentials =
{
UserName =
{
#if DEBUG
UserName = "xxx_test",
Password = "xxx"
#else
UserName = "xxx",
Password = "xxx"
#endif
}
}
};
...
}
...
}
Web服务识别"测试"用户名中的部分(或不是)并建立数据库连接。
public override void Validate(string userName, string password)
{
switch (userName)
{
case "xxx":
Helpers.CurrentUserCredentials = new WebServiceCredentials(ApplicationType.xxx, false);
case "xxx_test":
Helpers.CurrentUserCredentials = new WebServiceCredentials(ApplicationType.xxx, true);
break;
...
}
...
}
根据WebServiceCredential对象,通过ConfigurationManager类从Web.config检索连接数据。
public DBSettings(WebServiceCredentials userCredentials)
{
switch (userCredentials.ApplicationType)
{
case ApplicationType.XXX:
XXXConnectionString = (userCredentials.IsTestMode)
? ConfigurationManager.ConnectionStrings["XXXTest"].ConnectionString
: ConfigurationManager.ConnectionStrings["XXXProd"].ConnectionString;
...
}
...
}
在大多数情况下,这是有效的(让我们说约99%)。但有时会建立与错误数据库的连接,并检索或写入错误数据(更糟糕)。
应用程序本身不使用任何任务或后台操作。但该应用程序同时被大约10个用户使用。 WCF连接配置为InstanceContextMode.PerCall
。我认为错误必须在客户端某处,但我没有步骤来重现问题。它刚刚发生。
我很感激每一点提示。