我有一个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监听队列进程是不可靠的 . 有时候工作有时不行 . 有人能帮我吗?