C# 从信号集线器到特定客户端的Servicebus主题消息
我们正在尝试将主题消息发送给曾经请求此主题的杰出连接客户。中心托管在具有持久连接的WebRole内 目前实施的方法是C# 从信号集线器到特定客户端的Servicebus主题消息,c#,asp.net-web-api,signalr,servicebus,C#,Asp.net Web Api,Signalr,Servicebus,我们正在尝试将主题消息发送给曾经请求此主题的杰出连接客户。中心托管在具有持久连接的WebRole内 目前实施的方法是 1:客户端必须发出一个订阅组的初始请求,在此之后,它不会对服务器方法进行任何调用,但会等待来自服务器的消息 ///Tenantid-fix KnownIDToClient [HubMethodName("subscribe")] public async Task Subscribe(string tenantid) { if (!string.IsNullOrWhiteSp
1:客户端必须发出一个订阅组的初始请求,在此之后,它不会对服务器方法进行任何调用,但会等待来自服务器的消息
///Tenantid-fix KnownIDToClient
[HubMethodName("subscribe")]
public async Task Subscribe(string tenantid)
{
if (!string.IsNullOrWhiteSpace(tenantid))
await Groups.Add(Context.ConnectionId, tenantid);
}
2:一个Http Post请求,用于在subscribe方法调用之后启动Subscription客户端的onMessage进程
[HttpPost]
[ResponseType(typeof(HttpResponseMessage))]
[EnableCors(origins: "*", headers: "*", methods: "POST")]
public HttpResponseMessage GetDeviceSettings([FromBody] string tenantid)
{
MessageReceiver.Instance.InitiateRequest(requestParms[0], tenantid);
}
此控制器方法将启动订阅客户端的OnMessage请求
RtmSubsCriptionClient().OnMessage((msg) =>
{
SendRtmTopicMessage(msg, tenantid);
msg.CompleteAsync();
}
我在这里面临的挑战
1:我必须在onMessage中传递GroupName(tenantid)才能找到客户机
2:GC将处理OnMessage方法的调用方对象,因为它源于控制器方法,并且在响应之后,它不具有任何活动对象的范围[怀疑]
3:多个Post方法调用将触发多个OnMessage请求,这将导致异常OnMessage方法已在消息上被调用
一个解决办法,但不要认为这是可行的
Task RealTimetask=new Task(async () => await RecieveRealTimeBrokeredMessage(tenantid));
if (RealTimetask.IsCompleted) RealTimetask.Start();
4:如果我在后台线程中运行OnMessage,如何才能找到我必须向哪个客户端发送消息,因为GroupName不在这里的范围内。有问题吗?我不完全了解应用程序中的所有内容是如何联系在一起的,但我怀疑你在OnMessage循环中存在范围问题。对找到的每条消息调用回调,并在客户端打开时继续运行。在我回答之前,有几个问题:谁创建/持有订阅客户端?MSG在sub中是否只针对一个客户端?有问题吗?我不完全了解应用程序中的内容是如何结合在一起的,但我怀疑您在OnMessage循环中存在范围界定问题。对找到的每条消息调用回调,并在客户端打开时继续运行。在我回答之前,有几个问题:谁创建/持有订阅客户端?子系统中的MSG是否只针对一个客户?