回调中的“对象引用未设置为对象实例”错误

Posted

技术标签:

【中文标题】回调中的“对象引用未设置为对象实例”错误【英文标题】:"Object reference not set to an instance of object" error in callback 【发布时间】:2013-02-19 13:22:48 【问题描述】:

我正在使用 IHttpAsyncHandler 和 XMLHTTPRequest 在以下 URL 的帮助下将消息推送到客户端:http://www.codeproject.com/Articles/42734/Using-IHttpAsyncHandler-and-XMLHttpRequest-to-push 但我做了一些更改,实际上这个示例仅基于一个客户端,我必须向多个客户端发送消息,所以我进行了这些更改

public void ProcessRequest(HttpContext context)

        var recipient = context.Request["recipient"]; 
        lock (_obj)
                       
            string[] totalfrnds = ("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20").Split(',');//<- This is just an example for many clients

            foreach (var a in totalfrnds)
            
                var handle = MyAsyncHandler.Queue.Find(q => q.SessionId == a);//<- check who's client is online or not

                if (handle != null)
                
                    handle.Message = context.Request["message"];

                    handle.SetCompleted(true);
                
            
        
 

现在我有两个问题

    如何解决此类错误?这不是永久性错误,它是随机发生的。

    W3wp.exe 中异步线程的限制是什么,超过 25 个请求时无法打开下一个请求,我必须重置 IIS 才能重新启动应用程序。

    李>

【问题讨论】:

【参考方案1】:

如何解决此类错误?

您有一个 race condition - 更改您的 SetCompleted 方法以在调用时获取 Callback 的副本,例如

var handler = Callback;
if (isCompleted && handler != null)

    handler(this);


W3wp.exe中异步线程的限制是什么

这是在您服务器上的 machine.config 文件中配置的,特别是 &lt;processModel&gt; 部分中的 ma​​xWorkerThreads 元素,根据文档,默认值为 20

在每个 CPU 的基础上配置用于进程的最大工作线程数。例如,如果在单处理器服务器上此值为 25,则 ASP.NET 使用运行时 API 将进程限制设置为 25。在双处理器服务器上,限制设置为 50。默认值为20。 maxWorkerThreads 的值必须等于或大于配置部分中的 minFreeThread 属性设置。

【讨论】:

感谢您的回答。你能用适当的例子简单解释一下吗? @ankitGupta "给我一个合适的解决方案" - 这不是寻求帮助的正确方式!另外我已经给了你一个合适的解决方案。 实际上我正在尝试解决最近几天的此错误,但没有找到解决方案,这就是我向您寻求解决方案的原因。我不明白解决方案。你能描述一下吗 @ankitGupta 你问了 2 个问题 - 据我所知,我已经回答了 - 我不知道你还想让我告诉你什么,因为你的问题没有改变。 您的解决方案不起作用。再次出现同样的错误。

以上是关于回调中的“对象引用未设置为对象实例”错误的主要内容,如果未能解决你的问题,请参考以下文章

对象引用未设置为对象实例的自动映射器问题

AsQueryable() 返回用户未处理的 NullReference 异常“对象引用未设置为对象实例”

无法获得显示对象引用未设置为对象实例的结果

如何找到引发“ NullReferenceException:'对象引用未设置为对象实例的方法'?”

Request.UrlReferrer 在页面刷新时为空

将对象的引用传递给jQuery中的回调函数[重复]