我有一个基本的ASP.NET MVC2站点,每次加载视图(非部分视图)时都会记录单个"文件不存在"错误.我很确定这是因为我从主页面引用了一个不存在的文件,但我无法弄清楚它是哪一个.
堆栈跟踪没用(见下文).有没有人有关于如何最好地调试这个的任何提示?
File does not exist. : at System.Web.StaticFileHandler.GetFileInfo(String virtualPathWithPathInfo, String physicalPath, HttpResponse response)
at System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context)
at System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Run Code Online (Sandbox Code Playgroud) 我希望更好地理解为什么建议不要使用NServiceBus从网站发布消息(NServiceBus文档,滚动大约三分之二的时间).
它是否对Publish()事件和Send()命令具有语义意义?如果是这样,我认为Web应用程序可以同时发布()和发送():-)
此外,由于使用发布()不需要的Web应用程序,以了解邮件的收件人(发送()要求的Web应用程序配置了所有收件人端点),感觉就像发布()是一个更好的选择许多场景,以便您可以"任意"订阅应用程序到消息队列.
有没有人对此有这种或那种强烈的感受?我很想听听你的想法和意见.
我有一个BrokeredMessageContext类,它使用Timer定期检查并更新BrokeredMessage实例上的锁,以防处理此消息的进程运行的时间超过预期.它通过调用BrokeredMessage实例上的RenewLock()方法来更新锁.
我希望这个调用给我一个与原始锁相同超时的新锁(MSDN声明"你可以在与实体锁定超时相同的持续时间内更新锁定,并且没有锁定续订的最大持续时间.") ,但在调试时,锁定超时似乎增加了"任意"10-15秒.我在BrokeredMessage实例上设置了一个监视器,我可以看到每次调用RenewLock()时,LockedUntilUtc属性都会增加10-15秒.
有谁知道为什么会这样?可以做任何事情来延长锁定时间吗?
编辑:
Mike的回答如下,是正确的.事实上,我发现事实上,我试图从开始就每隔十秒更新一次锁,即使我的代码是为了在锁定到期之前的20秒之前更新锁定.这一切都归结为一个时间比较问题,以及我机器上的时间错误的事实(它提前了将近一分钟).D'哦!
我在表单的顶部有@ Html.ValidationSummary("请检查以下错误:")的视图.始终呈现文本"请检查以下错误:" ,无论模型状态是否有效(我已在视图和控制器中验证了模型状态).
谁能指出我为什么会这样?我觉得我在这里遗漏了一些非常基本的东西 - 但我很难过!
我正在遇到一个关于HttpHandler的一个非常好奇的问题,我希望这里的某些人能够阐明这一点.非常感谢您提前阅读本文.
我们创建了一个HttpHandler,它位于IIS网站的管道中,用于提供图像,视频和其他资产.HttpHandler非常轻巧.其唯一目的是检查磁盘上是否存在所请求的媒体资产,如果不存在,则将资产的URL重新写入资产所在的位置.已经以这种方式创建了处理程序,以允许我们将媒体资产迁移到新的文件夹结构中.我们还计划在图像和视频URL上使用处理程序(我将从此处称为URLRewriter)用于SEO.
如前所述,URLRewriter类非常轻量级.我们对它进行了内存分析,并确定它在运行时只消耗大约12B的内存.但是,当我们将处理程序放入IIS管道时,我们会看到一些奇怪的行为,最终会导致大量的内存消耗,并且总是会导致w3工作进程回收.我们看到的行为是这样的:
当请求http://www.ourimageserver.com/media/a/b/c/d/image1xxl.jpg(而不是实际的URL)上的图像请求时,我们注意到W3WP.exe创建并挂起,图像路径中每个文件夹的句柄:
•/ media•/ media/a•/ media/a/b•/ media/a/b/c•/ media/a/b/c/d
这是一个很大的问题,因为我们拥有数十万个媒体资产,这些资产存储在一个非常广泛且非常深的文件夹结构中.当URLRewriter部署到我们的生产环境时,IIS/W3WP创建的句柄数量迅速增长,W3WP的内存消耗也相应增加.在不到一个小时的运行时间(在交通相对平静的时期),W3WP持有的手柄数量超过22000,并且该过程已经死亡.我们还注意到,部署URLRewriter的服务器上的内核内存使用量有所增加.
使用Process Explorer和Process Monitor(无论是否附带VS调试器)仔细检查W3WP的行为,都会发现句柄是在调用URLRewriter之前创建的.实际上,句柄是在触发BeginRequest事件之前创建的.从管道中删除URLRewriter时,不会创建这些句柄.现在,一个非常奇怪的事情是,看起来句柄是由W3WP执行的NotifyChangeDirectory操作创建的.为什么W3WP会要求通知这些目录的更改?我们怎样才能阻止它这样做呢?当然这不是默认/正常行为吗?
如果您对可能导致此问题的原因有任何想法,我将非常感谢您的意见.IIS6和IIS7上的行为是相同的.
NHibernate的ISession公开了一个带有两个重载的方法Persist().我无法在任何地方找到有关此方法的文档.在http://nhibernate.info/doc/nh/en/index.html上的NHibernate参考资料中甚至没有提到它.
这种方法是否已弃用,还是会被弃用?什么时候应该使用?它与SaveOrUpdate()相比如何?
任何指针都将非常感激.
讨论已经开始起作用:
我们有一个有IList的课程.事实是一个抽象的基类,有几个具体的子类(PopulationFact,GdpFact等).
最初我们以这种方式查询给定的事实,即按类型:
.Facts.FirstOrDefault(x => x.Year == 2011 && x is GdpFact)
Run Code Online (Sandbox Code Playgroud)
然而,现在提出的问题是我们是否应该引入FactType枚举来代替
.Facts.FirstOrDefault(x => x.Year == 2011 && x.FactType == FactType.Gdp)
Run Code Online (Sandbox Code Playgroud)
提出这个建议是因为它应该更快.我承认我没有写任何测试来试图辨别性能上的差异,但我有两个问题:
1)这样的'查询类型'本身就是坏的吗?
2)在事实是强类型的情况下,是不是添加FactType枚举只是多余的?
更新 为了澄清,这是LINQ to objects和GdpFact:Fact.
更新2 我们使用当前的典型数据(4个事实)进行了测量,结果如下:
在枚举上查找:在类型上查找0.296600000000000000003毫秒:0.24530000000000002毫秒
因此在这种情况下类型查找更快!我会仔细选择我接受的答案.
我有一个名为AdviceId的类,它支持对字符串的隐式转换.我还重写了类上的ToString()方法,以确保每次调用此方法时都返回正确的字符串输出.
我的应用程序使用Dapper保留数据.以前AdviceIds是作为字符串持久化和检索的,但我现在尝试使用特定类型.但是,这失败了.有没有特别的技巧告诉Dapper在字符串和我的AdviceId类型之间使用隐式转换?
更新 我已经设法让Dapper通过向SqlMapper添加类型映射来将AdviceId实例作为字符串插入
SqlMapper.AddTypeMap(typeof(AdviceId), DbType.String);
Run Code Online (Sandbox Code Playgroud)
并通过使AdviceId实现IConvertible.但是,我没有运气将数据库从db转换回AdviceId的实例.
c# ×3
.net ×1
asp.net-mvc ×1
azure ×1
dapper ×1
httphandler ×1
iis ×1
isession ×1
linq ×1
memory-leaks ×1
messaging ×1
nhibernate ×1
nservicebus ×1
performance ×1
servicebus ×1