IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

Problème avec WebSocket


Sujet :

ASP.NET MVC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2014
    Messages : 53
    Par défaut Problème avec WebSocket
    Bonjour à tous,

    Je me suis penché sur la communication avec WebSocket qui me semble géniale. Cependant, je n'arrive pas à communiquer avec mon serveur. J'ai fait un petit programme d'essai qui m'affiche un message à chaque état de connexion, côté client. Le problème, c'est que je n'arrive pas à contacter mon contrôleur qui est censé gérer tout ce qui est WebSocket. Voilà le code côté serveur…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Net.WebSockets;
    using System.Web;
    using System.Web.WebSockets;
    using System.Web.Http;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
     
    namespace WebSocket.Controllers
    {
        public class WSChatController : ApiController
        {
            public HttpResponseMessage Get()
            {
                if (HttpContext.Current.IsWebSocketRequest)
                {
                    HttpContext.Current.AcceptWebSocketRequest(ProcessWSChat);
                }
     
                return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols);
            }
     
            private async Task ProcessWSChat(AspNetWebSocketContext contexte)
            {
                System.Net.WebSockets.WebSocket socket = contexte.WebSocket;
     
                while (true)
                {
                    ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
                    WebSocketReceiveResult resultat = await socket.ReceiveAsync(buffer, CancellationToken.None);
     
                    if (socket.State == WebSocketState.Open)
                    {
                        string messageUtilisateur = Encoding.UTF8.GetString(buffer.Array, 0, resultat.Count);
                        messageUtilisateur = "Vous avez envoyé : " + messageUtilisateur + " à " + DateTime.Now.ToLongTimeString();
                        buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(messageUtilisateur));
                        await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }
    }
    Et le code côté client, rien d'exceptionnel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Essai</title>
    </head>
        <script>
            var connexion = new WebSocket("ws://localhost/api/WSChat");
     
            connexion.onopen = function () { alert("Connexion établie !!") }
     
            connexion.onclose = function () {
                alert("Connexion terminée");
            }
        </script>
    </body>
    </html>
    J'ai tenté de suivre ce tutoriel mais j'ai dû me tromper certainement quelque part…
    Est-ce qu'il y a moyen de simplement se connecter au serveur ? Le reste est simple (envoi de messages, etc.…) si j'ai compris…

    Merci d'avance pour votre aide !

  2. #2
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2014
    Messages : 53
    Par défaut
    En fait, le projet est bon mais il fallait que, lors de la création du projet, je coche la case Web API et c'est ça qui m'a bloqué depuis plusieurs jours. Également, il ne faut pas oublier le port avec JavaScript.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation des Websockets
    Par moha93 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 26/06/2020, 00h07
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo