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

FTP(File Transfer Protocol ) configuration and testing in Windows Server 2008 R2

First of all you have to know  what the FTP is " File Transfer Protocol ( FTP ) is a standard network protocol used to transfer files from one host or to another host over a TCP -based network". FTP Installation & Configuration: Step 1: Install the Web Server role with the IIS Management Console and FTP Server role services: Step 2: Add a new FTP Site Step 3: Setup the site with the default bindings and choose Allow SSL to avoid deploying a certificate:     Step 4: Configure user permissions and basic or anonymous permission. If your server is connected to your domain you can specify domain users, otherwise they must be local user accounts: Note: Finally you’ll have to configure your server’s firewall rules to allow access.Disregard any existing FTP firewall rules; although they should be enabled, they don’t actually allow access! Run Allow a Program Through Windows Firewall and grant access to C:\Windows\System32\svchost.exe T...

Limit Upload File Type Extensions ASP.NET MVC 5

  //-----------------------------------------------------------------------    // <copyright file="AllowExtensionsAttribute.cs" company="None">    //     Copyright (c) Allow to distribute this code and utilize this code for personal or commercial purpose.    // </copyright>    // <author>Asma Khalid</author>    //-----------------------------------------------------------------------       namespace  ImgExtLimit.Helper_Code.Common   {        using  System;        using  System.Collections.Generic;        using  System.ComponentModel.DataAnnotations;        using  System.Linq;      ...