У меня возникла странная проблема с Signal R, и я практически исчерпал все решения, с которыми сталкивался в сети. Как локально, так и на нашем QA-сервере, Signal R работает просто отлично. Методы-концентраторы вызываются, а методы-концентраторы вызывают свои клиентские методы с помощью Client.Group ([groupname]). Method (). Однако на нашем производственном сервере есть один метод-концентратор, который пытается вызвать клиентские методы через Client.Group, а методы просто не вызываются. Я скопировал код как из локальной копии для разработки, так и с сервера QA, но независимо от того, что я сделал, я все еще не могу заставить работать на рабочем сервере.

Я гарантировал, что мои методы находятся в правильном месте для следующего вопроса: Методы клиента JS SignalR не задействованы , и я прочитал множество других вопросов, чтобы попытаться найти потенциальные ответы, но ничего не помогло с этой точки зрения.

Ниже описываются методы-концентраторы, сначала назначающие пользователя группе …

        public Task AwaitRequest(string driverRole)
        {
            var driverCode = Context.User.Identity.Name;
            IDriverStatus status = DriverStatusServiceFactory.GetCurrent.GetByCode("Login");
            IDriverRoles role = DriverRolesServiceFactory.GetCurrent.GetByCode(driverRole);
            var driver = SimpleInjectorFactory.GetCurrentContainer.GetInstance<IDriverLog>();
            driver.DriverId = driverCode;
            driver.DriverStatus = status.DriverStatusId;
            driver.LastUpdated = DateTime.UtcNow;
            driver.DriverRoleId = role.DriverRoleId;
            DriverLogServiceFactory.GetCurrent.InsertUpdate(driver);
            return Groups.Add(Context.ConnectionId, driverCode.ToLower());
        }

, а затем другой метод-концентратор, который должен вызывать методы клиента с использованием строк Clients.Group () … в приведенном ниже. функция.

        public void AssignRequest(string driverRole)
        {
            Guid.TryParse(_currentFacilityId, out Guid currentFacilityIdGuid);

            string driverCode = Context.User.Identity.Name;
            IDriverLog driverLog = DriverLogServiceFactory.GetCurrent.GetByCode(driverCode);

            Guid requestId =
                ShuttleDataServiceFactory.GetCurrent.OfferHotTruckRequest(driverCode, currentFacilityIdGuid, driverRole);
            if (requestId != Guid.Empty)
            {
                IHotTruckRequest request = DapperCrudHelper.GetById<HotTruckRequest, Guid>(requestId);
                Clients.Group(driverCode.ToLower()).help();
                Clients.Group(driverCode.ToLower()).assignRequest(request.Id, request.Accepted, request.IsNew);
                Lazy<IHubContext> hubLazy =
                    new Lazy<IHubContext>(() => GlobalHost.ConnectionManager.GetHubContext<HotTruckAdminHub>());
                hubLazy.Value.Clients.Group(_currentFacilityShortName).update(request);

                if (!Equals(driverLog.DriverStatus, (int) DriverStatusEnum.Offered) &&
                    !Equals(driverLog.HotTruckRequestId, request.Id))
                {
                    string msg = $"Assigned hot truck request {request.Id} to driver {driverCode}";
                    CreateAuditLog("Assigned Load", "Hot Truck", request.Id.ToString(), "system", _currentFacilityId,
                        _currentCompanyId, msg);
                }
            }
        }

Ниже приведены два метода клиента, которые должны вызываться, но это не так.

    hotTruckHub.client.help = function() {
        console.log("blah");
    }

    hotTruckHub.client.assignRequest = function (requestId, Accepted, isNew) {
       console.log(requestId);
        if (requestId !== 0) {
            clearInterval(working);
            $('#RequestId').val(requestId);
            if (isNew) {
                hideshow('AcceptLoad'); 
                CurrentRequestId = requestId;
                if (loadPendingAcceptance === null || loadPendingAcceptance === undefined) {
                    loadPendingAcceptance = setInterval(function() {
                            hotTruckHub.server.checkLoadStatus(requestId);
                        },
                        2000);
                }
            } else {
                if (Accepted) {
                    clearInterval(loadPendingAcceptance);
                    clearInterval(working);
                } else {
                    hideshow('AcceptLoad');
                   CurrentRequestId = requestId;
                    clearInterval(loadPendingAcceptance);
                    clearInterval(working);
                }
            }
            if (accept === null || accept === undefined) {
                accept = setInterval(function() {
                        hotTruckHub.server.declineLoad(CurrentRequestId, true);
                    },
                    180000);
            }
        }
    };

Я не получаю никаких сообщений об ошибках в консоли в Chrome. Локально и на QA-сервере оба эти метода вызываются успешно, и я получаю, что console.log () запускает их в консоли и ожидаемую функциональность в противном случае.