我有一个Asp.Net网络应用程序 . 当用户单击按钮时,发送到要处理的辅助服务的请求 . 同时,用户被重定向到下一页 . 一旦辅助服务处理消息,它就将结果发送到服务总线队列 . 连接的客户端及其连接字符串存储在SignalR Hub中 . 服务器端继续监听结果队列,以便向用户显示收到的结果 .

这是我的OnConnect方法:

public override Task OnConnected()
        {
            var id = Context.QueryString["Id"];
            this.Groups.Add(this.Context.ConnectionId, id);
            return base.OnConnected();
        }

这是我的侦听队列方法:

public void StartListenToQueue()
        {
            var connectionString = "blabla";
            var queueName = "myqueue";
            var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
            try
            {
                client.OnMessageAsync(async brokerMessage =>
                     {
                        try
                        {
                            var message = new StreamReader(brokerMessage.GetBody<Stream>(), Encoding.UTF8).ReadToEnd();
                            if (!string.IsNullOrEmpty(message))
                            {
                                var obj = JsonConvert.DeserializeObject<MessageDo>(message);
                                var context = GlobalHost.ConnectionManager.GetHubContext<SignalRHub>();                                      
                                await context.Clients.Group(obj.ExperimentId).addImage(obj.ImageUri);
                             }
                            brokerMessage.Complete(); 
                         }
                        catch (Exception e)
                        {
                            //brokerMessage.Abandon();
                        }
                    });
            }
            catch
            {
                StartListenToQueue();
            }
        }

以下是我如何在客户端管理与SignalR的连接:

$.connection.hub.qs = "Id=" + @Html.Raw(Json.Encode(Model.Id));


$.connection.hub.start().done(function() {
                        signalRHubProxy.server.startListenToQueue();
                    });

我的问题是,这种策略不可靠 . 我没有在ServiceBus队列中看到任何死信消息,但SignalR有时不会将消息发送给用户 . 特别是有时当页面仍在加载时,辅助服务已经处理了消息并将结果发送到SignalR队列 . 通过辅助服务接收和处理所有消息 . 问题是SignalR监听队列进程是不可靠的 . 有时候工作有时不行 . 有人能帮我吗?