我有一个由网关和几个后端服务组成的Web应用程序。 网关是一个自托管的OWIN应用程序,涵盖诸如身份验证,授权以及将API调用路由到后端的问题。SignalR简单网关
我有兴趣在我的后端服务之一中使用SignalR来将数据推送到客户端。例如。用户启动长时间运行的查询,并在数据可用时反馈给客户端。
我设法利用从横向扩展的文章作为一个传递机制的背板(虽然现在看来,这不是为这样的消息) SignalR scaleout explanation
“网关”枢纽代码:(逻辑仅用于测试目的)
public override async Task OnConnected()
{
HttpClient client = new HttpClient()
{
BaseAddress = new Uri("http://localhost:8888/other/")
};
var result = await client.PostAsJsonAsync("signin", Context.ConnectionId);
await base.OnConnected();
}
后端控制器代码
[HttpPost]
[Route("signin")]
public void PostSignin([FromBody]string id)
{
StartPing(id);
}
public async Task StartPing(string id)
{
var context = GlobalHost.ConnectionManager.GetHubContext<FrontendHub>();
int i = 0;
while (true)
{
i++;
context.Clients.Client(id).showMessage("num " + i);
await Task.Delay(1000);
}
}
但是,这是一个很大的企业应用程序,我不希望网关对后端服务的实际代码有任何依赖性。但是该示例仅在网关和后端服务中定义了具有相同名称的集线器时才起作用。另一方面,我想避免在网关中放置这样的专用代码的需要,另一方面,我想利用能够使用实际函数名称和参数的能力。我不想要一个具有单一功能的“主中心”。
有没有办法做到这一点?