FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
Я всегда использую USEBACKQ, так что, если у вас есть строка для вставки или длинное имя файла, вы можете использовать свои двойные кавычки, не нажимая эту команду.
Теперь, если ваш вывод будет содержат несколько строк, вы можете это сделать
SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var!count!=%%F
SET /a count=!count!+1
)
ECHO %var1%
ECHO %var2%
ECHO %var3%
ENDLOCAL
Вот общая версия того, что мы использовали в Stack Overflow в течение прошлого года:
/// <summary>
/// Decorates any MVC route that needs to have client requests limited by time.
/// </summary>
/// <remarks>
/// Uses the current System.Web.Caching.Cache to store each client request to the decorated route.
/// </remarks>
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class ThrottleAttribute : ActionFilterAttribute
{
/// <summary>
/// A unique name for this Throttle.
/// </summary>
/// <remarks>
/// We'll be inserting a Cache record based on this name and client IP, e.g. "Name-192.168.0.1"
/// </remarks>
public string Name { get; set; }
/// <summary>
/// The number of seconds clients must wait before executing this decorated route again.
/// </summary>
public int Seconds { get; set; }
/// <summary>
/// A text message that will be sent to the client upon throttling. You can include the token {n} to
/// show this.Seconds in the message, e.g. "Wait {n} seconds before trying again".
/// </summary>
public string Message { get; set; }
public override void OnActionExecuting(ActionExecutingContext c)
{
var key = string.Concat(Name, "-", c.HttpContext.Request.UserHostAddress);
var allowExecute = false;
if (HttpRuntime.Cache[key] == null)
{
HttpRuntime.Cache.Add(key,
true, // is this the smallest data we can have?
null, // no dependencies
DateTime.Now.AddSeconds(Seconds), // absolute expiration
Cache.NoSlidingExpiration,
CacheItemPriority.Low,
null); // no callback
allowExecute = true;
}
if (!allowExecute)
{
if (String.IsNullOrEmpty(Message))
Message = "You may only perform this action every {n} seconds.";
c.Result = new ContentResult { Content = Message.Replace("{n}", Seconds.ToString()) };
// see 409 - http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
c.HttpContext.Response.StatusCode = (int)HttpStatusCode.Conflict;
}
}
}
Пример использования:
[Throttle(Name="TestThrottle", Message = "You must wait {n} seconds before accessing this url again.", Seconds = 5)]
public ActionResult TestThrottle()
{
return Content("TestThrottle executed");
}
Кэш ASP.NET работает как чемпион здесь - используя его, вы получаете автоматическую очистку ваших записей газа. И с нашим растущим трафиком мы не видим, что это проблема на сервере.
Не стесняйтесь оставлять отзывы об этом методе; когда мы сделаем Stack Overflow лучше, вы получите исправление Ewok еще быстрее :)
Не стесняйтесь оставлять отзывы об этом методе; когда мы сделаем Stack Overflow лучше, вы получите исправление Ewok еще быстрее :)
Не стесняйтесь оставлять отзывы об этом методе; когда мы сделаем Stack Overflow лучше, вы получите исправление Ewok еще быстрее :)
Microsoft имеет новое расширение для IIS 7 под названием Динамическое Расширение Ограничений IP для IIS 7.0 - Бета.
"Динамические Ограничения IP для IIS 7.0 модуль, который обеспечивает защиту против атак "отказ в обслуживании" и атак перебором веб-сервера и веб-сайтов. Такая защита обеспечена путем временного блокирования IP-адресов клиентов HTTP, которые делают необычно высокое количество параллельных запросов или кто делает большое количество запросов за маленький промежуток времени". http://learn.iis.net/page.aspx/548/using-dynamic-ip-restrictions/
Пример:
при установке критериев для блокирования после X requests in Y milliseconds
или X concurrent connections in Y milliseconds
, IP-адрес будет заблокирован для Y milliseconds
тогда, запросы будут разрешены снова.
Мы используем технику, одолженную от этого URL http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx, не для регулировки, а для Отказа в обслуживании бедного человека (D.O.S). Это также основано на кэше, и может быть подобно тому, что Вы делаете. Вы регулируете для предотвращения нападений D.O.S.? Маршрутизаторы могут, конечно, использоваться для сокращения D.O.S; Вы думаете, что маршрутизатор мог обработать регулировку, Вам нужно?