简体   繁体   中英

Trying to create a signal R chat application but gives error

I am trying to create a signal R chat application where I want user who send message should be the only to recieve the message not everyone should recieve the message but dont know where I am doing wrong as message isnot recieved by any one.

My code is like this: Hub Class

using Microsoft.AspNet.SignalR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace SignalRTutorials
{
    public class ChatHub:Hub
    {
        public void Send(  string message)
        {
            // Call the broadcastMessage method to update clients.
           //  Clients.All.broadcastMessage(name, message);
           Clients.User(HttpContext.Current.Session["Name"].ToString()).broadcastMessage(message);

        }

    }
}

index page is like this:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="SignalRTutorials.index1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
   <title>SignalR Simple Chat</title>
    <style type="text/css">
        .container {
            background-color: #99CCFF;
            border: thick solid #808080;
            padding: 20px;
            margin: 20px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
 <div class="container">
        <input type="text" id="message" />
        <input type="button" id="sendmessage" value="Send" />
        <input type="hidden" id="displayname" runat="server"  />
        <ul id="discussion">
        </ul>
    </div>
    <!--Script references. -->
    <!--Reference the jQuery library. -->
    <script src="Scripts/jquery-1.6.4.min.js" ></script>
    <!--Reference the SignalR library. -->
    <script src="Scripts/jquery.signalR-2.1.0.min.js"></script>
    <script src="Scripts/jquery.signalR-2.1.2.min.js"></script>
    <!--Reference the autogenerated SignalR hub script. -->
    <script src="signalr/hubs"></script>
    <!--Add script to update the page and send messages.--> 
    <script type="text/javascript">
        $(function () {
            // Declare a proxy to reference the hub. 
            var chat = $.connection.chatHub;
            // Create a function that the hub can call to broadcast messages.
            chat.client.OnMessage = function (message) {
                // Html encode display name and message. 
          // var encodedName = $('<div />').text(name).html();
                var encodedMsg = $('<div />').text(message).html();
                // Add the message to the page.  + encodedName
                $('#discussion').append('<li><strong>'
                    + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
            };
            // Get the user name and store it to prepend to messages.
            $('#displayname').val(prompt('Enter your name:', ''));

            <% Session["Name"] = displayname.Value ;%>
            // Set initial focus to message input box.  
            $('#message').focus();
            // Start the connection.
            $.connection.hub.start().done(function () {
                $('#sendmessage').click(function () {
                    // Call the Send method on the hub. 
                    chat.server.send(  $('#message').val());
                    // Clear text box and reset focus for next comment. 
                    $('#message').val('').focus();
                });
            });
        });
    </script>
    </form>
</body>
</html>

Your question: I want user who send message should be the only to recieve the message not everyone should recieve the message.

To solve this, modify ChatHub class like this.

public void Send(string message)
{
   Clients.Caller.broadcastMessage(message); // calling user will be broadcasted the message only.
   // OR use below one.
   Clients.Client(Context.ConnectionId).broadcastMessage(message); // Context.ConnectionId -- contains connectionid for calling user.
}

When a client invokes a function on the server side you can retrieve their connection ID via Context.ConnectionId .

Helpful links - http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#selectingclients

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM