private static void ObtainProcessDispatcher() { byte[] data = SNINativeMethodWrapper.GetData(); if (data == null) { Bid.NotificationsTrace("<sc.SqlDependency.ObtainProcessDispatcher|DEP> nativeStorage null, obtaining dispatcher AppDomain and creating ProcessDispatcher.\n"); _AppDomain defaultAppDomain = SNINativeMethodWrapper.GetDefaultAppDomain(); if (defaultAppDomain != null) { ObjectHandle handle = CreateProcessDispatcher(defaultAppDomain); if (handle != null) { SqlDependencyProcessDispatcher dispatcher = (SqlDependencyProcessDispatcher)handle.Unwrap(); if (dispatcher != null) { _processDispatcher = dispatcher.SingletonProcessDispatcher; ObjRef objRef = GetObjRef(_processDispatcher); BinaryFormatter formatter2 = new BinaryFormatter(); MemoryStream stream = new MemoryStream(); GetSerializedObject(objRef, formatter2, stream); SNINativeMethodWrapper.SetData(stream.GetBuffer()); return; } Bid.NotificationsTrace("<sc.SqlDependency.ObtainProcessDispatcher|DEP|ERR> ERROR - ObjectHandle.Unwrap returned null!\n"); throw ADP.InternalError(ADP.InternalErrorCode.SqlDependencyObtainProcessDispatcherFailureObjectHandle); } Bid.NotificationsTrace("<sc.SqlDependency.ObtainProcessDispatcher|DEP|ERR> ERROR - AppDomain.CreateInstance returned null!\n"); throw ADP.InternalError(ADP.InternalErrorCode.SqlDependencyProcessDispatcherFailureCreateInstance); } Bid.NotificationsTrace("<sc.SqlDependency.ObtainProcessDispatcher|DEP|ERR> ERROR - unable to obtain default AppDomain!\n"); throw ADP.InternalError(ADP.InternalErrorCode.SqlDependencyProcessDispatcherFailureAppDomain); } Bid.NotificationsTrace("<sc.SqlDependency.ObtainProcessDispatcher|DEP> nativeStorage not null, obtaining existing dispatcher AppDomain and ProcessDispatcher.\n"); BinaryFormatter formatter = new BinaryFormatter(); MemoryStream stream2 = new MemoryStream(data); _processDispatcher = GetDeserializedObject(formatter, stream2); Bid.NotificationsTrace("<sc.SqlDependency.ObtainProcessDispatcher|DEP> processDispatcher obtained, ID: %d\n", _processDispatcher.ObjectID); }