4

我使用SocketIO4Net通过 C#连接到Socket.IO,但是当我尝试向客户端发出对象时,我的 C# 应用程序突然关闭(我有一个 MVC3 项目)

我阅读了事件查看器并且有 3 个错误:

1)

A Webhost unhandled exception occurred.
 Sender Information: System.AppDomain/26995560
 Exception: System.Runtime.FatalException: Object reference not set to an instance of an object. ---> System.NullReferenceException: Object reference not set to an instance of an object.

2)

An unhandled exception occurred and the process was terminated.

Application ID: /LM/W3SVC/2/ROOT

Process ID: 3696

Exception: System.Runtime.FatalException

Message: Object reference not set to an instance of an object.

3)

Application: w3wp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Runtime.FatalException
Stack:
   at System.Runtime.Fx+IOCompletionThunk.UnhandledExceptionFrame(UInt32, UInt32, System.Threading.NativeOverlapped*)
   at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)

我的项目有什么问题?SocketIO4NET 中是否有任何错误?

4

1 回答 1

0

最后我找到了答案,这是因为 .NET 的版本(我使用 .NET 4)和 WCF duplexChannel。

您应该在 WCF 包装器类的顶部添加此属性:

[CallbackBehavior(UseSynchronizationContext=false)]

感谢 Cauldwell.net 的回答: http: //www.cauldwell.net/patrick/blog/CategoryView,category,CodeGen.aspx

来自 cauldwell.net:

事实证明,问题在于 ASP.NET(默认情况下)使用了一个叫做 SynchronizationContext 的小东西。据我所知(说实话,我还没有彻底研究过)其中一项工作是确保在 UI 线程上运行任何回调,从而避免像你一样调用 Control.Invoke赢表格。在我的例子中,那个额外的锁给了一些合适的东西,它试图清理一个不再存在的线程上的东西,因此是 NullReferenceException。

特别感谢詹姆斯

于 2012-06-19T05:21:10.427 回答