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);
        }