C# 集线器无法向控制台客户端发送消息

C# 集线器无法向控制台客户端发送消息,c#,asp.net,azure,signalr,signalr-hub,C#,Asp.net,Azure,Signalr,Signalr Hub,我已经为我的Windows Azure项目实施了SignalR。我有两个客户机——web角色中的Javascript/HTML客户机和项目中的控制台应用程序。Web角色是我的信号服务器。当我将web角色和控制台应用程序作为启动项目时,我从HTML客户端发送的消息将发送到控制台应用程序。但是,当我将云项目和控制台应用程序作为启动项目时,来自HTML客户端的消息不会发送到控制台应用程序。这真的很奇怪,我不知道这两者之间的区别是什么导致了这个问题 如果我在我的web角色中放置了一个后台线程,它会定期向

我已经为我的Windows Azure项目实施了SignalR。我有两个客户机——web角色中的Javascript/HTML客户机和项目中的控制台应用程序。Web角色是我的信号服务器。当我将web角色和控制台应用程序作为启动项目时,我从HTML客户端发送的消息将发送到控制台应用程序。但是,当我将云项目和控制台应用程序作为启动项目时,来自HTML客户端的消息不会发送到控制台应用程序。这真的很奇怪,我不知道这两者之间的区别是什么导致了这个问题

如果我在我的web角色中放置了一个后台线程,它会定期向连接的客户端发送消息,它在两种情况下都会工作,我的意思是控制台应用程序和HTML客户端都会接收消息,而不管启动项目如何

如果你知道问题出在哪里,请告诉我

我的中心:

public class BroadcastHub : Hub
{
    public void Send(PersistedAudioRecord record)
    {
        // Call the BroadcastAudio method to update clients.
        Clients.All.BroadcastAudio(record);
    }
}
我的HTML/Javascript客户端:

<script type="text/javascript">
    $(function () {

        // Declare a proxy to reference the hub. 
        var broadcast = $.connection.broadcastHub;
        // Create a function that the hub can call to broadcast messages.
        broadcast.client.broadcastAudio = function (record) {
            // Html encode user name, channel and  title. 
            var encodedName = $('<div />').text(record.Username).html();
            var encodedChannel = $('<div />').text(record.Channel).html();
            var encodedTitle = $('<div />').text(record.Title).html();
            // Add the broadcast to the page. 
            $('#broadcasts').append('<li><strong>' + encodedName
                + '</strong>:&nbsp;&nbsp;' + encodedChannel + '</strong>:&nbsp;&nbsp;' + encodedTitle + '</li>');
        };
        // Get the user name.
        $('#displayname').val(prompt('Enter your name:', ''));
        // Get the Channel name to which you want to broadcast.
        $('#channelname').val(prompt('Enter Channel:', ''));
        // Set initial focus to message input box.  
        $('#title').focus();
        // Start the connection.
        $.connection.hub.start().done(function () {
            $('#sendbroadcast').click(function () {
                // Call the Send method on the hub. 
                var broadcastMessage = {}
                broadcastMessage.Username = $('#displayname').val();
                broadcastMessage.Channel = $('#channelname').val();
                broadcastMessage.Title = $('#title').val();
                broadcast.server.send(broadcastMessage);
                // Clear text box and reset focus for next broadcast. 
                $('#title').val('').focus();
            });
        });
    });
</script>

$(函数(){
//声明代理以引用中心。
var broadcast=$.connection.broadcastHub;
//创建一个中心可以调用以广播消息的函数。
broadcast.client.broadcastAudio=功能(记录){
//Html编码用户名、频道和标题。
var encodedName=$('').text(record.Username.html();
var encodedChannel=$('').text(record.Channel.html();
var encodedTitle=$('').text(record.Title.html();
//将广播添加到页面。
$(“#广播”).append(“
  • ”+encodedName +“:”+encodedChannel+”:“+encodedTitle+”
  • ); }; //获取用户名。 $('#displayname').val(提示('输入您的姓名:',''); //获取要广播到的频道名称。 $('#channelname').val(提示('Enter Channel:',''); //将初始焦点设置为消息输入框。 $(“#title”).focus(); //启动连接。 $.connection.hub.start().done(函数(){ $(“#发送广播”)。单击(函数(){ //在集线器上调用Send方法。 var broadcastMessage={} broadcastMessage.Username=$('#displayname').val(); broadcastMessage.Channel=$('#channelname').val(); broadcastMessage.Title=$('#Title').val(); broadcast.server.send(broadcastMessage); //清除文本框并重置下次广播的焦点。 $('#title').val('.focus(); }); }); });
    我的控制台应用程序客户端:

    class Program
    {
        static void Main(string[] args)
        {
            HubConnection connection = new HubConnection("http://localhost:35540/");
            IHubProxy proxy = connection.CreateHubProxy("BroadcastHub");
            proxy.On<AudioRecord>("BroadcastAudio", BroadcastAudio);
    
            connection.Start().Wait();
    
            Console.ReadLine();
        }
    
        static void BroadcastAudio(AudioRecord record)
        {
            Console.WriteLine("Broadcast: {0} {1} {2}", record.Username, record.Channel, record.Title);
        }
    }
    
    类程序
    {
    静态void Main(字符串[]参数)
    {
    轮毂连接=新轮毂连接(“http://localhost:35540/");
    IHubProxy=connection.CreateHubProxy(“BroadcastHub”);
    代理。On(“BroadcastAudio”,BroadcastAudio);
    connection.Start().Wait();
    Console.ReadLine();
    }
    静态无效广播音频(音频记录)
    {
    WriteLine(“广播:{0}{1}{2}”,record.Username,record.Channel,record.Title);
    }
    }
    
    背景线程:

    public class BackgroundThread
    {
        private static Random _random = new Random();
    
        public static void Start()
        {
            ThreadPool.QueueUserWorkItem(_ =>
            {
                IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<BroadcastHub>();
    
                while (true)
                {
                    PersistedAudioRecord record = new PersistedAudioRecord();                    
                    record.Channel = _random.Next(10).ToString();
                    record.Username = new string('a', Convert.ToInt32(record.Channel));
                    record.Title = new string('b', Convert.ToInt32(record.Channel));
    
                    try
                    {
                        hubContext.Clients.All.BroadcastAudio(record);
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Trace.TraceError("SignalR error thrown: {0}", ex);
                    }
                    Thread.Sleep(TimeSpan.FromSeconds(2));
                }
            });
        }
    }
    
    公共类背景线程
    {
    私有静态随机_Random=新随机();
    公共静态void Start()
    {
    ThreadPool.QueueUserWorkItem(=>
    {
    IHubContext hubContext=GlobalHost.ConnectionManager.GetHubContext();
    while(true)
    {
    PersistedAudioRecord记录=新的PersistedAudioRecord();
    record.Channel=_random.Next(10).ToString();
    record.Username=新字符串('a',Convert.ToInt32(record.Channel));
    record.Title=新字符串('b',Convert.ToInt32(record.Channel));
    尝试
    {
    hubContext.Clients.All.BroadcastAudio(录制);
    }
    捕获(例外情况除外)
    {
    System.Diagnostics.Trace.TraceError(“抛出的信号器错误:{0}”,ex);
    }
    线程睡眠(TimeSpan.FromSeconds(2));
    }
    });
    }
    }
    
    我在我的应用程序中尝试了这个场景,我能够将消息从一个webrole发送到一个控制台应用程序。是否有可能压缩您的项目,并发送给它,看看这是否重新开始