/// <summary>
        /// Генерация короткой ссылки (используя особый механизм)
        /// </summary>
        /// <param name="nativeLink">Исходная ссылка</param>
        /// <returns>Укороченная ссылка</returns>
        public static async Task <string> GetNewShortLinkAsync(string nativeLink)
        {
            var dbLinks = new DbLinks();
            //1. Проверка сгенерированной ссылки на занятость
            string    shortUrl;
            ShortLink existShortUrl;

            do
            {
                shortUrl      = GenerateIdentifier(ShortUrlCharset, ShortUrlLength);
                existShortUrl = await dbLinks.GetNativeLinkCachedAsync(shortUrl);
            } while (shortUrl.Equals(existShortUrl?.ShortUrl));


            /*2. Запись в кеш ссылок, свежесгенерированной ссылки, для моментального использования + что бы не получилось что в БД еще пусто.
             * т.к. по статистике она сразу же будет использована создателем для проверки работоспособности.*/

            //CacheClient.SetCachedObject(shortUrl, nativeLink, TimeSpan.FromMinutes(CasheConfig.LinksDefaultCachePeriodInMinutes));

            //TODO 3. Запись в БД отдельной задачей Task.Run или скорее всего через async (еще протестирую производительность)
            ThreadPool.QueueUserWorkItem(async q =>
            {
                try
                {
                    await dbLinks.SaveLink(shortUrl, nativeLink);
                }
                catch (Exception ex)
                {
                    //ToDo подключить логирование
                }
            });
            //Task.Run(async () => await dbLinks.SaveLink(shortLink, nativeLink));

            return($"{_hostUrl}/{shortUrl}");
        }
Exemple #2
0
        public void Add(String table, DbLinks link, LinkCondition condition = null)
        {
            Dictionary <DbLinks, LinkCondition> linker = new Dictionary <DbLinks, LinkCondition>();

            linker.Add(link, condition);
            this.links.Add(table, linker);
        }
Exemple #3
0
        /// <summary>
        /// Открытие длинной ссылки, через короткую, с засчитываем клика и т.д.
        ///  </summary>
        /// <param name="shortUrl"></param>
        /// <returns>Выдает длинную ссылку</returns>
        public static async Task <string> OpenShortUrl(string shortUrl)
        {
            var dbLinks = new DbLinks();
            var link    = await dbLinks.GetNativeLinkCachedAsync(shortUrl).ConfigureAwait(false);

            if (link != null)
            {
                await LinkStatisticCounter.AddRedirectLinkCount(link.Id).ConfigureAwait(false);
            }

            return(link?.NativeUrl);
        }
        //调试修改添加
        private void GetAllDbLinks()
        {
            UserConfigHelper.GetConfig();
            //RDIFramework.Utilities.UserInfo user = new RDIFramework.Utilities.UserInfo();
            this.UserInfo.OpenId          = "7d46323d-0091-4bf5-8a13-67fef63a4cd4";
            this.UserInfo.Id              = "26F43BC9-AE6D-42D2-BAC9-F4237A949484";
            this.UserInfo.Code            = "Administrator";
            this.UserInfo.RealName        = "Administrator";
            this.UserInfo.IsAdministrator = true;
            DataTable dtDbLinks = RDIFrameworkService.Instance.DbLinkDefineService.GetDT(this.UserInfo);

            if (dtDbLinks != null && dtDbLinks.Rows.Count > 0)
            {
                foreach (DataRow dataRow in dtDbLinks.Rows)
                {
                    ConnectString connStr = new ConnectString
                    {
                        LinkName = dataRow[CiDbLinkDefineTable.FieldLinkName].ToString()
                    };
                    string dbType = dataRow[CiDbLinkDefineTable.FieldLinkType].ToString();
                    switch (dbType.ToUpper())
                    {
                    case "ACCESS":
                        connStr.DbType = CurrentDbType.Access;
                        break;

                    case "ORACLE":
                        connStr.DbType = CurrentDbType.Oracle;
                        break;

                    case "MYSQL":
                        connStr.DbType = CurrentDbType.MySql;
                        break;

                    case "SQLLITE":
                        connStr.DbType = CurrentDbType.SQLite;
                        break;

                    case "DB2":
                        connStr.DbType = CurrentDbType.DB2;
                        break;

                    default:
                        connStr.DbType = CurrentDbType.SqlServer;
                        break;
                    }
                    connStr.DbLink = dataRow[CiDbLinkDefineTable.FieldLinkData].ToString();
                    DbLinks.Add(connStr);
                }
            }
        }
        private void GetAllDbLinks()
        {
            var dtDbLinks = RDIFrameworkService.Instance.DbLinkDefineService.GetDT(this.UserInfo);

            if (dtDbLinks == null || dtDbLinks.Rows.Count <= 0)
            {
                return;
            }

            foreach (DataRow dataRow in dtDbLinks.Rows)
            {
                var connStr = new ConnectString
                {
                    LinkName = dataRow[CiDbLinkDefineTable.FieldLinkName].ToString(),
                    DbLink   = dataRow[CiDbLinkDefineTable.FieldLinkData].ToString()
                };
                string dbType = dataRow[CiDbLinkDefineTable.FieldLinkType].ToString();
                switch (dbType.ToUpper())
                {
                case "ACCESS":
                    connStr.DbType = CurrentDbType.Access;
                    break;

                case "ORACLE":
                    connStr.DbType = CurrentDbType.Oracle;
                    break;

                case "MYSQL":
                    connStr.DbType = CurrentDbType.MySql;
                    break;

                case "SQLLITE":
                    connStr.DbType = CurrentDbType.SQLite;
                    break;

                case "DB2":
                    connStr.DbType = CurrentDbType.DB2;
                    break;

                default:
                    connStr.DbType = CurrentDbType.SqlServer;
                    break;
                }
                DbLinks.Add(connStr);
            }
        }
Exemple #6
0
 public DbTablesLinks(String table, DbLinks link, LinkCondition condition = null)
 {
     this.links = new Dictionary <String, Dictionary <DbLinks, LinkCondition> >();
     this.Add(table, link, condition);
 }
Exemple #7
0
 public void AddDbLink(String table, DbLinks link, LinkCondition condition = null)
 {
     this.dbTablesLinks.Add(table, link, condition);
 }