在执行期间混合调试和非调试模式 - 竞争条件?

时间:2016-08-09 09:26:57

标签: c# .net visual-studio wcf debugging

我有一个连接到不同数据库的应用程序,具体取决于构建配置。在#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。我认为错误必须在客户端某处,但我没有步骤来重现问题。它刚刚发生。

我很感激每一点提示。

0 个答案:

没有答案