System komunikacja (wiadomości) pomiędzy użytkownikami w ramach tej samej aplikacji webowej ASP.Net MVC

0

Witam szanownych programmersów newbie here :) i mam być może głupie pytanie dotyczące platformy ASP.Net na frameworku MVC 4.5.
Otóż jakie jest powiedzmy klasyczne rozwiązanie komunikacji - przesyłania wiadomości pomiędzy użytkownikami strony opartej o ww. framework i czy są jakieś gotowe rozwiązania do tego.
Jak wymodelować klasy jakich metod użyć aby obsłużyć taki chat pomiędzy dwoma zalogowanymi użytkownikami. Robię aplikację webową, która byłaby czymś w rodzaju platformy aukcyjnej i chciałbym dodać możliwość komunikacji między użytkownikami wraz z historią wiadomości i powiadamianiem że user ma nowe wiadomości. Obsługa kont użytkowników jest standardowa, oparta na klasie IdentityUser.
Szukałem trochę na necie ale nie ma niczego konkretnego w tym zakresie. Jedynie co mi wpadło w oko to tutki do messagera opartego na SingnalR, który być może nadałby się do takich celów ale trzeba by trochę zainwestować czasu by się tego nauczyć i raczej sporo go przerobić żeby zapisywał wszystkie wiadomości w bazie danych, obsługiwał historię wiadomości i nie wiem czy to byłoby dobre rozwiązanie bo ponoć czasami potrafi gubić przesyłane dane.
Czy są jakieś gotowe rozwiązania, klasyczne przykłady, tutoriale do takiego systemu komunikacji?
Jakby ktoś miał linka do takiego tutka ewentualnie mógł naprowadzić mnie na rozwiązanie to byłbym wdzięczny.
pozdr.

1

Jak chcesz SignalR, to tutaj masz jak zrobić taki prosty chat za pomocą SignalRa, niestety tylko "hello world", więc bez systemu logowania.

Testowałem to z rok temu i chodziło dość dobrze, nie przypominam sobie żeby gubił dane, ale nie wykluczam tego.

https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/tutorial-getting-started-with-signalr

Nie jestem pewien, ale chyba z tą bazą nie byłoby aż tak źle, zerknij na kod z tego przykładu:

otrzymujesz username i wiadomość która w sumie przed zbroadcastowaniem klientów, mógłbyś po prostu wysłać do bazy

( lub po prostu wszystko to przerobić na swoje, jak już ogarnąłbyś )

public class ChatHub : Hub
{
    public void Send(string name, string message)
    {
        // Call the broadcastMessage method to update clients.
        Clients.All.broadcastMessage(name, message);
    }
}

W htmlu i jsie wygląda to tak (w tym linku wyżej masz cały ten kod):

        <input type="text" id="message" />
        <input type="button" id="sendmessage" value="Send" />
        <input type="hidden" id="displayname" />
            $.connection.hub.start().done(function ()
             {
                $('#sendmessage').click(function () 
                 {
                    // Call the Send method on the hub. 
                    chat.server.send($('#displayname').val(), $('#message').val()); ///  tutaj ta metoda Send z c#

Ewentualnie tutaj masz przykład z giełdą:

https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/tutorial-server-broadcast-with-signalr

0

Nie jestem zawodowym programistą i tak właśnie się zastanawiałem czy dobrze rozkminam ale dodałeś ten kod z konkretnym wyszczególnieniem rzeczy i się rozjaśniło. Czyli wygląda na to że da się faktycznie prosto z argumentów metody Send() wyciągnąć usera i jego wiadomość i zapisać to do bazy a odpalać to za pomocą jQuery. Dzięki że dodałeś tą solucję i za naprowadzenie na rozwiązanie.
Ten przykład live update wyników z giełdy też działa na wyobraźnię co by tu można z takim Signalem zrobić :)
Pozdr.

1

W sumie, teraz zastanawiałem się: gdybym chciał mieć chat + możliwość przesyłania prywatnych wiadomości, to jak to zabezpieczyć przed atakami typu mitm itd?

Jest kilka artykułów na stronie MS dot. zabezpieczeń

https://docs.microsoft.com/en-us/aspnet/signalr/overview/security/

m.in nt. autoryzacja/logowanie, o które wcześniej pytałeś

0

Wygląda na to że SignalR jest całkiem nieźle skrojony pod ASP MVC. Nie znam się na tych atakach za bardzo ale kombinuje że zalogowani userzy byliby chronieni z czyli wymuszenie logowania atrybutem [Authorize] przy akcjach wysyłania wiadomości by w sumie załatwiło sprawę. Właśnie chodziło o to aby znaleźć coś takiego co dobrze komponuje się z funkcjami logowania i zarządzaniem użytkownikami ale i tak trzeba będzie pokombinować z klasą Wiadomości.
Zdziwiłem się tylko że tak ciężko znaleźć tutorial do takiej komunikacji między userami. Zazwyczaj rozwiązania ASP.MVC są dosyć łatwo dostępne w sieci wszystko ładnie rozpisanie z modelami klas, metodami, bazami danych. Wydawałoby się że taka funkcja komunikacji to standard i powinno coś być a tu prawie nic.

1 użytkowników online, w tym zalogowanych: 0, gości: 1