Skip to main content

Cannot access a disposed object. A common cause of this error is disposing a context that was

 Cannot access a disposed object. A common cause of this error is disposing a context that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling Dispose() on the context, or wrapping the context in a using statement. If you are using dependency injection, you should let the dependency injection container take care of disposing context instances. Object name: 'PropertyContext'.



 public class CustomerHub : Hub

    {

        public readonly ICustomerService _customerService;

        private readonly IServiceScopeFactory _serviceScopeFactory;

        public CustomerHub(ICustomerService service, IServiceScopeFactory serviceScopeFactory)

        {

            _customerService = service;

            _serviceScopeFactory = serviceScopeFactory;

        }


     


        public async Task<string> RegisterToOPLogon(string clientName)

        {

            string clientID = Context.ConnectionId;

            ClientInfo.Clients.Add(new AppClient(clientID, clientName));


            BusinessUpdateGenerator.DoJob(Context.ConnectionId,_serviceScopeFactory);


            return "Successfully Registered.";

        }


        public override Task OnDisconnectedAsync(Exception exception)

        {

            string connectionId = Context.ConnectionId;

            ClientInfo.Clients.Remove(ClientInfo.Clients.Where(c => c.Id == connectionId).FirstOrDefault());

            return base.OnDisconnectedAsync(exception);

        }


        public static void NotifyUpdates(string message, string clientName,string connectionId)

        {

            _hubContext.Clients.Client(connectionId).SendAsync("ReceiveMessageOPLogOn", message);

        }


    }


    public static class BusinessUpdateGenerator

    {


        public static void DoJob(string connectionId, IServiceScopeFactory _serviceScopeFactory)

        {

            _ = Task.Delay(5000).ContinueWith(a =>

              {


                  using (var scope = _serviceScopeFactory.CreateScope())

                  {

                      var _customerService = scope.ServiceProvider.GetService<ICustomerService>();

                      var data =  _customerService.GetRoles().Result;

                  }


                  string clientName = ClientInfo.Clients.Where(c => c.Id == connectionId).FirstOrDefault()?.Name;

                  string message = $"This message is for [{clientName}] and his connection id is [{connectionId}]<br/>Now it is {DateTime.UtcNow.ToString()} O'Clock.";

                  CustomerHub.NotifyUpdates(message, clientName,connectionId);


                  DoJob(connectionId, _serviceScopeFactory);

              });

            

        }

    }


    public static class ClientInfo

    {

        public static List<AppClient> Clients = new List<AppClient>();

    }


    public class AppClient

    {

        public string Id { get; set; }

        public string Name { get; set; }

        public AppClient(string id, string name)

        {

            Id = id;

            Name = name;

        }

    }

Comments

Popular posts from this blog

update your package-lock.json according to what you have specified in the package.json file

  The objective of the   npm update   command is to update your   package-lock.json   according to what you have specified in the   package.json   file. This is the normal behavior. If you want to update your package.json file, you can use  npm-check-updates :  npm install -g npm-check-updates . You can then use these commands: ncu  Checks for updates from the package.json file ncu -u  Update the package.json file npm update --save  Update your package-lock.json file from the package.json file

Referenced assembly does not have a strong name

  Steps to create strong named assembly Step 1 : Run visual studio command prompt and go to directory where your DLL located.   For Example my DLL located in  D:/hiren/Test.dll Step 2 : Now create  il file using below command.    D:/hiren> ildasm /all /out=Test.il Test.dll   (this command generate code library) Step 3 : Generate new Key for sign your project.    D:/hiren> sn -k mykey.snk Step 4 : Now sign your library using ilasm command.    D:/hiren> ilasm /dll /key=mykey.snk Test.il so after this step your assembly contains strong name and signed. Jjust add reference this new assembly in your project and compile project its running now. codeproject.com/Tips/341645/Referenced-assembly-does-not-have-a-strong-name

SQL Server(from 2012) FileTable Features some useful SQL Statements

The FileTable feature brings support for the Windows file namespace and compatibility with Windows applications to the file data stored in SQL Server. FileTable lets an application integrate its storage and data management components, and provides integrated SQL Server services - including full-text search and semantic search - over unstructured data and metadata.( FileTable ) Here is sequential SQL statements to enable,alter existing database for FileStream and create FileTable --check current config value EXEC sp_configure filestream_access_level; --reconfig GO EXEC sp_configure 'filestream access level',   2 Go RECONFIGURE GO -- chack file table enabled databases  SELECT DB_NAME(database_id) as [Database Name], non_transacted_access, non_transacted_access_desc ,directory_name FROM sys.database_filestream_options --  Enable a file table in an existing Database ALTER DATABASE TestDB  SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECT...