ASP. NET MVC Методы клиента SignalR, не вызванные в отдельном проекте - PullRequest
1 голос
/ 18 января 2020

У меня есть два отдельных проекта asp. net на одном сервере. Насколько я знаю, в обоих проектах установлены все правильные пакеты nual для SignalR. Один из них - ChatServer, а другой - ChatClient. Оба являются проектами DotNetNuke.

Второй проект знает о signalR, потому что OnConnected в проекте Server запускается при запуске клиентского проекта, а пользователь клиента вставляется как подключенный к сети (через метод OnConnected сервера).

Когда сервер подключается к сети (запуская серверный проект), метод в клиентском "getonlineusers" не запускается. Но если я перефразирую sh клиента, сервер отображается как автономный. Но мне не нужно пересматривать sh.

Возможно, я что-то упускаю, не уверен, правильно ли я создаю прокси для клиентского проекта, любая помощь будет принята с благодарностью.

Как сделать Вы подключаете отдельный проект клиента к проекту, в котором есть хаб с SignalR?

В проекте ChatServer:

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }


public class ChatSupportHub : Hub
    {
        private ChatServerManager CSM { get; set; }

        private int UserID { get; set; }

        //private UserInfo CurrentUser { get; set; }
        public ChatSupportHub()
        {
            CSM = new ChatServerManager();
            //CurrentUser = DotNetNuke.Entities.Users.UserController.Instance.GetCurrentUserInfo();
        }


        public override Task OnConnected()
        {

            int outNumber = -1;

            Online user = new Online();
            User dbUser = new User();

            var userid = Context.QueryString["userid"];

            bool success = Int32.TryParse(userid, out outNumber);

            string connID = Context.ConnectionId;

            if (success)
            {
                user.ID = outNumber;
                dbUser = CSM.GetUser(outNumber);
                UserID = outNumber;
            }

            user.ConnectionID = connID;
            user.Type = dbUser.TypeID.HasValue ? CSM.GetUserType((int) dbUser.TypeID) : null;
            user.ShowOnline = true;

            CSM.AddOnlineUser(user);

            var onlineUsers = CSM.GetOnlineUsers();

            var clients = Clients.Caller;

            string onlineUserJSON = JsonConvert.SerializeObject(onlineUsers);

            clients.getonlineusers(dbUser.Name, onlineUserJSON);

            return base.OnConnected();
        }


        public override Task OnDisconnected(bool stopCalled)
        {
            var username = Context.User.Identity.Name;

            int userID = CSM.GetUserId(username);

            CSM.RemoveOnlineUser(userID);


            return base.OnDisconnected(stopCalled);
        }
    }

И страница просмотра индекса проекта ChatServer:

<script src="~/myServertProjectPath/Scripts/jquery.signalR-2.4.1.min.js"></script>
<script src="~/signalr/hubs"></script>

<script>

    $(function () {

        // set up the hub connection
        var hub = $.connection.chatSupportHub;
        $.connection.hub.qs = "userid=" + @Model.CurrentUserInfo.UserID.ToString();

        hub.client.getonlineusers = function (currentUsername, onlineUsers) {

            if (onlineUsers) {
                console.log('There are users online and one is: ' + currentUsername);
            }
        }

        $.connection.hub      
            .start()          
            .done(function () {

            })
   });

И то же самое в отдельном клиентском проекте для представления:

<script src="~/myClientProjectPath/Scripts/jquery.signalR-2.4.1.min.js"></script>
<script src="~/signalr/hubs"></script>

<script>
    $(function () {
        connect();
    });

    function connect() {

        hub = $.connection.chatSupportHub;
        $.connection.hub.qs = "userid=" + @Model.CurrentUserInfo.UserID.ToString();


        hub.client.getonlineusers = function (currentUsername, onlineUsers) {
            if (onlineUsers) {
                console.log ("Hello from the separate project.");
            }
        }

        $.connection.hub
            .start()
            .done(function () {

            })
    }
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...