Этот ответ должен быть довольно коротким и сладким, чтобы ответить (часть) озаглавленного вопроса. Если вы хотите получить более подробный ответ, объясняющий, почему вы должны их там поместить, пожалуйста, перейдите здесь .
Общее правило для размещения typename
в основном, когда вы используете параметр шаблона, и хотите получить доступ к вложенному typedef
или с использованием псевдонима, например:
template
struct test {
using type = T; // no typename required
using underlying_type = typename T::type // typename required
};
Обратите внимание, что это также относится к метафункциям или вещи, которые также принимают общие параметры шаблона. Однако, если предоставленный параметр шаблона является явным типом, вам не нужно указывать typename
, например:
template
struct test {
// typename required
using type = typename std::conditional::type;
// no typename required
using integer = std::conditional::type;
};
Общие правила добавления определителя template
в основном аналогичны, за исключением они обычно включают шаблонные функции-члены (статические или другие) структуры / класса, которые сами шаблоны, например:
Учитывая эту структуру и функцию:
template
struct test {
template
void get() const {
std::cout << "get\n";
}
};
template
void func(const test& t) {
t.get(); // error
}
Попытка доступа t.get
изнутри функции приведет к ошибке:
main.cpp:13:11: error: expected primary-expression before 'int'
t.get();
^
main.cpp:13:11: error: expected ';' before 'int'
Таким образом, в этом контексте вам понадобится ключевое слово template
заранее и вызвать его так:
t.template get
Таким образом, компилятор будет анализировать это правильно, а не t.get < int
.
На ScriptManager существует свойство:
AsyncPostBackTimeout="300"
Это добилось цели (в основном просто игнорирующий все тайм-ауты):
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function (sender, args) {
if (args.get_error() && args.get_error().name === 'Sys.WebForms.PageRequestManagerTimeoutException') {
args.set_errorHandled(true);
}
});
</script>
Это могло бы настраиваться путем изменения тайм-аута сценария ASP в IIS.
Это расположено в свойствах Вашего веб-сайта, виртуального каталога, кнопки конфигурации, затем на вкладке опций.
или набор это путем установки Сервера. Свойство ScriptTimeout.
Ну, я предполагаю, что это работало бы, если Вы просто хотите запрос, выброшенный с потенциалом, который он никогда полностью выполнил...
Добавляют свойство AsyncPostBackTimeOut к тегу ScriptManager для изменения тайм-аута по умолчанию с 90 секунд к чему-то более разумному для приложения.
Далее, изучите изменение веб-сервиса, принимающего вызов для перемещения быстрее. 90 секунд могут также быть бесконечностью в интернет-время.
В моем случае объект ScriptManager был создан в файле Master Page, который затем был разделен с файлами Content Page. Поэтому, чтобы изменить свойство ScriptManager.AsyncPostBackTimeout в Content Page, я должен был получить доступ к объекту в файле aspx.cs Content Page:
protected void Page_Load(object sender, EventArgs e)
{
. . .
ScriptManager _scriptMan = ScriptManager.GetCurrent(this);
_scriptMan.AsyncPostBackTimeout = 36000;
}
Выполните следующие действия:
Шаг 1. В web.config установите httpRuntime maxRequestLength = "1024000" executionTimeout = "999999"
Шаг 2: Добавьте следующий параметр в ScriptManager вашей веб-страницы: AsyncPostBackTimeout = "360000"
Это решит вашу проблему.