0

再現が非常に難しい非常に奇妙なバグを踏みつけました。文字通り再現できません。約300台以上のPCに窓口サービスを導入。このサービスで使用される構成ファイル (xml) が明確になることがあります (一部)。xml タグなし、何もない、0kb を完全にクリアします。何がそのような問題を引き起こすのか、私にはわかりません。ログに例外は記録されていません。この構成が明確になった後でも、まだ実行されていますが、Web サービスとは通信していません。これは、xml シリアライゼーションおよびデシリアライゼーションに使用されるクラスです。そのような動作を引き起こしている可能性のあるものを見つけることができません。もちろん、この特定のクラスに問題はないかもしれません。助言がありますか??おそらく、ファイルがクリアになる原因のヒントがいくつかあります。このファイルに対する操作がこのクラスを使用する場合。

私の悪い英語でごめんなさい。

[XmlRootAttribute("xmlconfig", Namespace = "DSD_Config", IsNullable = false)]
public class xmlconfig
{
    [XmlElementAttribute(IsNullable = false)]
    public string ProgramApteczny { get; set; }
    public string Server { get; set; }
    public string Database { get; set; }
    public string User { get; set; }
    public string Password { get; set; }
    public string DSDUser { get; set; }
    public string DSDPassword { get; set; }
    public string DSDServerAdres { get; set; }

    //public static string cofFile = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\DSD_Agent\\config.xml";
    public static string cofFile = Application.StartupPath + "\\config.xml";

    public xmlconfig()
    {
    }

    public xmlconfig(string sProgramApteczny, string sServer, string sDatabase, string sUser, string sPassword, string sDSDUser, string sDSDPassword, string sDSDServerAdres)
    {
        ProgramApteczny = sProgramApteczny;
        Server = sServer;
        Database = sDatabase;
        User = sUser;
        Password = sPassword;
        DSDUser = sDSDUser;
        DSDPassword = sDSDPassword;
        DSDServerAdres = sDSDServerAdres;
    }

    public static void readXMLConfig(out xmlconfig configFile)
    {
        XmlSerializer oSerializer = new XmlSerializer(typeof(xmlconfig));
        configFile = new xmlconfig(); 

        try
        {
            using (FileStream fs = new FileStream(cofFile, FileMode.Open, FileAccess.Read))
            {
                 configFile = (xmlconfig)oSerializer.Deserialize(fs);

                 try
                 {
                     configFile.Password = Encryption.DecryptString(configFile.Password);
                 }
                 catch (Exception)
                 {
                     configFile.Password = configFile.Password;
                 }

                 try
                 {
                     configFile.DSDPassword = Encryption.DecryptString(configFile.DSDPassword);
                 }
                 catch (Exception)
                 {
                     configFile.DSDPassword = configFile.DSDPassword;
                 }
            }
        }
        catch 
        {
            configFile = null;
        }
    }

    public static void writeXMLConfig(string sProgramApteczny, string sServer, string sDatabase, string sUser, string sPassword, string sDSDUser, string sDSDPassword)
    {
        xmlconfig oxmlconfig = new xmlconfig();
        readXMLConfig(out oxmlconfig);

        sPassword = Encryption.EncryptString(sPassword);
        sDSDPassword = Encryption.EncryptString(sDSDPassword);

        if (oxmlconfig == null)
        {
            oxmlconfig = new xmlconfig(sProgramApteczny, sServer, sDatabase, sUser, sPassword, sDSDUser, sDSDPassword, "");
        }
        else
        {
            oxmlconfig.ProgramApteczny = sProgramApteczny;
            oxmlconfig.Server = sServer;
            oxmlconfig.Database = sDatabase;
            oxmlconfig.User = sUser;
            oxmlconfig.Password = sPassword;
            oxmlconfig.DSDUser = sDSDUser;
            oxmlconfig.DSDPassword = sDSDPassword;
        }

        XmlSerializer oSerializer = new XmlSerializer(typeof(xmlconfig));
        TextWriter oStreamWriter = null;
        try
        {
            oStreamWriter = new StreamWriter(cofFile, false);
            oSerializer.Serialize(oStreamWriter, oxmlconfig);
        }
        catch (Exception oException)
        {
            WriteToLog(DateTime.Now, "Aplikacja wygenerowała następujący wyjątek: " + oException.Message);
            // Console.WriteLine("Aplikacja wygenerowała następujący wyjątek: " + oException.Message);
        }
        finally
        {
            if (null != oStreamWriter)
            {
                oStreamWriter.Close();
            }
        }
    }

    public static void writeXMLDSDConfig(string sDSDServerAdres)
    {
        xmlconfig oxmlconfig = new xmlconfig();
        readXMLConfig(out oxmlconfig);

        if (oxmlconfig == null)
        {
            throw new Exception("Aplikacja wygenerowała następujący wyjątek: Musisz zdefiniować wszystkie parametry");
        }
        else
        {
            oxmlconfig.DSDPassword = Encryption.EncryptString(oxmlconfig.DSDPassword);
            oxmlconfig.Password = Encryption.EncryptString(oxmlconfig.Password);
            oxmlconfig.DSDServerAdres = sDSDServerAdres;
        }

        XmlSerializer oSerializer = new XmlSerializer(typeof(xmlconfig));
        TextWriter oStreamWriter = null;
        try
        {
            oStreamWriter = new StreamWriter(cofFile, false);
            oSerializer.Serialize(oStreamWriter, oxmlconfig);
        }
        catch (Exception oException)
        {
            throw new Exception("Aplikacja wygenerowała następujący wyjątek: " + oException.Message);
        }
        finally
        {
            if (null != oStreamWriter)
            {
                oStreamWriter.Close();
            }
        }
    }
}
4

1 に答える 1