首页 新闻 会员 周边

winform程序为什么会执行到HttpApplicationFactory?

0
悬赏园豆:100 [已解决问题] 解决于 2015-10-12 14:22

winform程序里面捕捉到一个HttpException异常,异常显示执行了HttpApplicationFactory的Init方法,Web程序里面,HttpApplicationFactory是由IIS在接收到请求后,通过一系列处理最后调用的,但是不知道为什么winform程序里面会执行到这个方法。winform程序的主要 组件有RabbitMQ、Quartz.NET、Castl ActiveRecord、WebSocket,是这些东西影响到的吗? 或者大家知道,HttpApplicationFactory.Init方法,还有什么方式来调用到?

下面是异常对象序列化信息:

"ClassName":"System.Web.HttpException",
"Message":"
    Invalid file name for file monitoring: ''. 
    Common reasons for failure include: 
    - The filename is not a valid Win32 file name. 
    - The filename is not an absolute path. 
    - The filename contains wildcard characters. 
    - The file specified is a directory. 
    - Access denied.",
"Data":null,
"InnerException":null,
"HelpURL":null,
"StackTraceString":" 
    at System.Web.FileChangesMonitor.StartMonitoringFile(String alias, FileChangeEventHandler callback) 
    at System.Web.HttpApplicationFactory.SetupChangesMonitor() 
    at System.Web.HttpApplicationFactory.Init() 
    at System.Web.HttpApplicationFactory.EnsureInited() 
    at System.Web.HttpApplicationFactory.RaiseError(Exception error) 
    at System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback(CacheItemRemovedCallback callback, CacheItemRemovedReason reason) 
    at System.Web.Caching.CacheEntry.Close(CacheItemRemovedReason reason) 
    at System.Web.Caching.CacheSingle.UpdateCache(CacheKey cacheKey, CacheEntry newEntry, Boolean replace, CacheItemRemovedReason removedReason, Object& valueOld) 
    at System.Web.Caching.ExpiresBucket.FlushExpiredItems(DateTime utcNow, Boolean useInsertBlock) 
    at System.Web.Caching.CacheExpires.FlushExpiredItems(Boolean checkDelta, Boolean useInsertBlock) 
    at System.Web.Caching.CacheExpires.TimerCallback(Object state) 
    at System.Threading.TimerQueueTimer.CallCallbackInContext(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.TimerQueueTimer.CallCallback() 
    at System.Threading.TimerQueueTimer.Fire() 
    at System.Threading.TimerQueue.FireQueuedTimerCompletion(Object state) 
    at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
    at System.Threading.ThreadPoolWorkQueue.Dispatch() 
    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()",
"RemoteStackTraceString":null,
"RemoteStackIndex":0,
"ExceptionMethod":"
    8
    StartMonitoringFile
    System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    System.Web.FileChangesMonitor
    System.DateTime StartMonitoringFile(System.String, System.Web.FileChangeEventHandler)",
"HResult":-2147024809,
"Source":"System.Web"
< >
分享
最佳答案
0

经过长时间的监控发现,这种异常出现在数据库服务压力大的时候。因此判定这个异常与数据库连接有关,但是具体原因还是不得知。

hourglasser | 初学一级 |园豆:15 | 2015-10-12 14:21
其他回答(2)
0

恩,如果这个错误不是从网络上下载来的(比如 WCF等可以传递服务器异常)

那么,可以先排查一下引用中有没有调用System.web.runtime 的东西或者组件。。

 

找一个源代码查看工具,把编译玩的程序拉进去,会自动分析依赖的类库。

收获园豆:50
G yc {Son of VB.NET} | 园豆:2006 (老鸟四级) | 2015-08-28 20:27

我在本程序代码里面查找了用到System.Web命名空间的代码,分析过后,我觉得那些是不会调用到HttpApplicationFactory的。你说的反编译工具指的哪个呢? ILSpy还是Reflector,我只用过他们进行反编译, 还没用过他们进行定位依赖组件的解析。 能截图说明一下怎么用吗? 谢谢了。

支持(0) 反对(0) hourglasser | 园豆:15 (初学一级) | 2015-08-30 12:07

@hourglasser:  http://www.telerik.com/download/justdecompile 我用的是这个工具, 左边那里右键,然后选择 Find Using 就可以找到所有使用这个类或成员的  对象

 

 

支持(0) 反对(0) G yc {Son of VB.NET} | 园豆:2006 (老鸟四级) | 2015-08-31 00:38

@G yc {Son of VB.NET}: 好的, 非常感谢!

支持(0) 反对(0) hourglasser | 园豆:15 (初学一级) | 2015-08-31 16:26
0

WebSocket、RabbitMQ都会用到Http请求,错误可能要具体再跟踪一下。

收获园豆:50
幻天芒 | 园豆:37175 (高人七级) | 2015-08-29 09:16

用到HTTP请求,但是这个会执行HttpApplicationFactory.Init的? 貌似不会吧, 而且WebSocket在System.Net命名空间下,而且接受和发送数据都是使用的Socket进行的,这个应该是不会执行HttpApplicationFactory.Init。 关于RabbitMQ,没有那么清楚了,这个会执行HttpApplicationFactory.Init的?不太清楚,如果我理解有什么错误的地方,还请指出一下。

支持(0) 反对(0) hourglasser | 园豆:15 (初学一级) | 2015-08-29 21:05

@hourglasser: 具体不知道哪个会使用到,我觉得还是从错误出处找原因,跟一下出错的时候的调用栈。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2015-08-29 23:30

@幻天芒: 我上面给出的错误序列化信息就有跟踪堆栈信息了,跟踪信息显示执行了HttpApplicationFactory.Init,就是不知道什么组件或者说代码会调用到HttpApplicationFactory,如果知道这个了,错误应该就比较方便定位了。 谢谢你的回答。

支持(0) 反对(0) hourglasser | 园豆:15 (初学一级) | 2015-08-30 12:02

@hourglasser: 上一步的调用者,应该是能够看到的哦。,

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2015-08-30 13:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册