我想增加httpRuntime executionTimeout一个ASP.NET MVC应用程序的子部分.
在常规Web应用程序中,您可以使用:
<configuration>
<location path="UploadPage.aspx">
<httpRuntime executionTimeout="600"/>
</location>
</configuration>
Run Code Online (Sandbox Code Playgroud)
但是,ASP.NET MVC中确实没有"文件夹"的概念,那么我该怎样做呢?
让我们假设ASP.NET MVC路径是/Images/Upload使用ImagesController和Upload Action.
我通过该ApplicationHost.CreateApplicationHost方法托管ASP.NET运行时.当我修改web.config应用程序运行时,我看到很多第一次机会ThreadAbortException抛出.这是在我的应用程序崩溃之前.我假设这是因为运行时已检测到配置更改并想要重新启动.
这对我们来说并不是真正受支持的场景,所以我更愿意,如果我可以关闭自动重新加载.
有谁知道如何做到这一点?
我们刚刚注意到executionTimeout已停止在我们的网站上工作.去年它肯定在工作......很难说什么时候停止了.
我们目前正在运行:
Web.Config有
<compilation defaultLanguage="vb" debug="false" batch="true">
<httpRuntime executionTimeout="90" />
Run Code Online (Sandbox Code Playgroud)
我们为什么一直看到Timetaken到20分钟的任何暗示.DebugType(完全vs pdbonly)的编译选项会有任何影响吗?
datetime timetaken httpmethod Status Sent Received<BR>
12/19/10 0:10 901338 POST 302 456 24273<BR>
12/19/10 0:18 1817446 POST 302 0 114236<BR>
12/19/10 0:16 246923 POST 400 0 28512<BR>
12/19/10 0:12 220450 POST 302 0 65227<BR>
12/19/10 0:22 400150 GET 200 180835 416<BR>
12/19/10 0:20 335455 POST 400 0 36135<BR>
12/19/10 0:57 213210 POST 302 0 51558<BR>
12/19/10 0:48 352742 POST 302 438 25802<BR> …Run Code Online (Sandbox Code Playgroud) 我最近升级了我们的c#Web应用程序,从4.5开始使用.net framework 4.6.1,直到今天才注意到web.configs .net版本与.net版本不同.一切似乎在生产中工作正常,但我的问题是,因为httpRuntime没有自动更改为4.6.1,我很好奇,如果那是故意的,还是我需要手动键入,或者是否还有其他原因在4.5?
主要有哪些优点和缺点使用的httpRuntime缓存不要使用简单的静态字段?
我需要将数据存储在整个ASP.NET应用程序的范围内.
HttpRuntime.Cache["MyData"] = someHashtable;
Run Code Online (Sandbox Code Playgroud)
与
private static System.Collections.Hashtable _myData;
public static System.Collections.Hashtable MyData
{
get
{
if (_myData == null)
{
_myData = new System.Collections.Hashtable();
// TODO: Load data
}
return _myData;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在升级我们的应用程序,它有一个内部Web服务器,从.NET 2.0到.NET 4.0.
我正在处理一个带有对象的请求,该对象HttpListenerWorkerRequest扩展了HttpWorkerRequest类,并创建了一个请求,该请求GetRawUrl()返回格式为的Url http://localhost:82/Default.aspx.
在.NET 2.0中,发送它HttpRuntime.ProcessRequest(httpListenerWorkerRequest)可以毫无问题地工作,但是在.NET 4.0中,我得到的网页上只有文本"Bad Request".
破解打开HttpRuntime,我可以看到Bad Requests被抛出ProcessRequestInternal(HttpWorkerRequest wr),一个试图构建HttpContext的私有方法.
我自己尝试过:
try
{
//what's going on?
hcontext = new HttpContext(workerRequest);
}
catch(Exception e)
{
//Debugging break point here
}
Run Code Online (Sandbox Code Playgroud)
预更新(.NET 2.0),它构建良好,更新后(.NET 4.0),我得到一个System.ArgumentException说明
The relative virtual path 'http:/localhost:82/Default.aspx' is not allowed here,扔了
at System.Web.VirtualPath.Create(String virtualPath, VirtualPathOptions options)
at System.Web.HttpRequest.get_ClientFilePath()
at System.Web.Security.CookielessHelperClass.RemoveCookielessValuesFromPath()
at System.Web.HttpContext.Init(HttpRequest request, HttpResponse response)
at System.Web.HttpContext..ctor(HttpWorkerRequest wr)
at Talcasoft.Web.Hosting.HttpWorkerThread.Run(Object request) in
C:\[OurLibrary].Web\Hosting\HttpWorkerThread.cs:line 51 …Run Code Online (Sandbox Code Playgroud) 如何在ASP.NET中用C#编程设置(使用GET SET属性)"httpRuntime maxRequestLength"作为代码隐藏
有没有办法web.config通过C#设置值?
我有一个用户尝试使用ASP.NET站点上传150兆字节的文件.他们得到一个HttpException:
System.Web.HttpException:超出最大请求长度.
我相信我可以通过将executionTimeout增加到300秒(5分钟)和maxRequestLength增加到204800千字节(200兆字节)来解决这个问题.但这样做是否有任何潜在的负面影响或危险?
我们有一个运行.NET 2.0的网站,并开始使用ASP.Net HttpRuntime.Cache来存储频繁数据查找的结果,以减少我们的数据库访问.
片段:
lock (locker)
{
if (HttpRuntime.Cache[cacheKey] == null)
{
HttpRuntime.Cache.Insert(cacheKey, GetSomeDataToCache(), null, DateTime.Today.AddDays(1), Cache.NoSlidingExpiration);
}
return ((SomeData)HttpRuntime.Cache[cacheKey]).Copy();
}
Run Code Online (Sandbox Code Playgroud)
每当我们想要查看缓存时,我们都会悲观地锁定.但是,我已经看到网上发布的各种博客建议您在检查缓存值后锁定,以免产生锁定开销.这似乎不正确,因为另一个线程可能在检查后写入缓存.
所以最后我的问题是这样做的"正确"方法是什么?我们甚至使用正确的线程同步对象吗?我知道ReaderWriterLockSlim(),但我们正在运行.NET 2.0.
在我的工作地点,我们有一个ASP.NET页面,它使用以下代码来执行文件下载.我们使用它而不是Request.TransmitFile(),因为该文件直接来自zip存档.
private void DownloadStream(Stream stream)
{
int bytesRead;
int chunkSize = 1048576; //1MB
byte[] readBuffer = new byte[chunkSize];
while ( (bytesRead = stream.Read(readBuffer, 0, readBuffer.Length)) > 0)
{
if (!Response.IsClientConnected)
break;
Response.OutputStream.Write(readBuffer, 0, bytesRead);
Response.Flush();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试确定httpRuntime executionTimeout设置的合理值.正在发送的文件范围高达1GB的大小,和我们的某些用户有非常慢的管道*的网络服务器(64K思行).我们不希望这些用户体验连接重置.但是,我们希望为站点的其余部分保留合理的超时值.
有没有办法只为这个特定的页面定义一个executionTimeout设置(或者甚至专门为该页面设置它)?推荐的方法是什么?我知道我们可能最好使用一种完全不同的方法来提供文件(例如FTP),但我们没有自由选择.我们所能做的就是修改网站的代码.
此外,我确实认为这些下载应该在发送之前进行压缩,但这是另一回事.
*题外话题:"慢管"是一个令人讨厌的混合比喻吗?我应该说"小管",但在这种情况下,这听起来很奇怪.意见?
我有一个很长的查询字符串值我需要传递(本身是一个可疑的练习,我明白),我无法让它在我的Appharbor应用程序实例上生效.
在本地,我已对我的web.config进行了此更改,并确认有问题的URL在本地工作:
<httpRuntime maxQueryStringLength="2097151"/>
Run Code Online (Sandbox Code Playgroud)
并确保它存在于生成的web.config中,通过我的Web.Release.config发布转换.也就是说,当我推送到AppHarbor时,转换应该把它拿起来......但我仍然得到这个例外:
The length of the query string for this request exceeds the configured maxQueryStringLength value.
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
at System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢你的帮助.
有谁知道HttpRuntime.UnloadAppDomain()在ASP.NET 5中是否有替换?我根本找不到HttpRuntime,是否会有这样的功能?
httpruntime ×12
asp.net ×8
web-config ×4
c# ×3
caching ×2
.net ×1
.net-4.5 ×1
.net-4.6.1 ×1
appharbor ×1
asp.net-core ×1
asp.net-mvc ×1
code-behind ×1
iis ×1
locking ×1
recycle ×1
timeout ×1