/// <summary> /// Послать ошибку на сервер. /// </summary> /// <param name="errorMes">Текст ошибки</param> /// <param name="additionalInfo">Дополнительная информация</param> public static bool SendErrorToServer(string errorMes, string additionalInfo) { //Выходим, если делать ничего не нужно. if (!SaveError) { return(false); } //Это для того чтобы если во время работы этого кода возникнет ошибка, не было зацикливания. SaveError = false; try { //Если чтение параметра неудачное, то ничего не делаем. var Params = new string[10]; //Получаем только при первой ошибке. if (ErrorsCount == 0) { if (Param.Load(DirectionQuery.Remote, Var.UserID, "SaveError", true, "User", out Params)) { if (!Params[0].Replace("SaveError=", "").ToBool()) { return(false); } SaveScreenshot = Params[1].Replace("SaveScreenshot=", "").ToBool(); CompressRatio = Params[2].Replace("CompressRatio=", "").ToInt(); SecBetweenSendError = Params[3].Replace("SecBetweenSendError=", "").ToInt(); } } //sys.Error.SaveError true/false: Сохранять ошибку на сервере или нет. Пример: SaveError=true //sys.Error.SaveScreenshot true/false: Сохранять текст ошибки на сервере или нет. Пример: SaveScreenshot=true //sys.Error.CompressRatio int: находится значение степени сжатия скриншота. По умолчанию формат JPEG, степень сжатия 90. Пример: CompressRatio=90 //sys.Error.SecBetweenSendError int: - количество секунд между ошибками. //sys.Error.LastDateTimeSendError datetime: Время последней ошибки. if (sys.GetSecDiff(LastDateTimeSendError, DateTime.Now) < SecBetweenSendError) { SaveError = true; return(false); } string imagebase64 = ""; string screenshoFormat = ""; string screenshotWidth = ""; string screenshotHeight = ""; string screenshotSize = ""; if (SaveScreenshot) { //Получение скриншота screenshoFormat = "WEBP"; screenshotWidth = Screen.PrimaryScreen.Bounds.Width.ToString(); screenshotHeight = Screen.PrimaryScreen.Bounds.Height.ToString(); Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics graphics = Graphics.FromImage(printscreen as Image); graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size); byte[] webpImageData; WebP.EncodeLossly(printscreen, CompressRatio, out webpImageData); imagebase64 = Convert.ToBase64String(webpImageData); screenshotSize = FBAFile.GetFileSizeStr(webpImageData.Length, true, false); } additionalInfo = sys.AddRightCR(additionalInfo); additionalInfo += GetSystemInfo(); string sql = "INSERT INTO fbaError (EntityID, UserID, ErrorTime, ErrorText, ScreenshotFormat, ScreenshotWidth, ScreenshotHeight, ScreenshotSize, " + "CompressRatio, AdditionalInfo, ScreenshotData) VALUES (" + Var.CR + "123, " + Var.UserID + "," + sys.DateTimeCurrent() + ",'" + errorMes + "','" + screenshoFormat + "','" + screenshotWidth + "','" + screenshotHeight + "'," + screenshotSize + ",'" + Error.CompressRatio.ToString() + "','" + additionalInfo + "','" + imagebase64 + "')"; sys.Exec(DirectionQuery.Remote, sql); LastDateTimeSendError = DateTime.Now; } catch { //Ошибку не выдаем. } SaveError = true; return(true); }