SignalR仅在天蓝色时偶尔发送消息

时间:2018-10-07 11:18:12

标签: javascript c# reactjs azure signalr

我有一个小的React Web应用程序,它从azure移动应用程序后端接收数据。后端是使用C#的ApiController的简单REST API。应将其他客户端在后端中的特定更改通知客户端。因此,我正在使用Signalr。在开发过程中在localhost上全部运行都可以正常工作,并且所有消息均正确发送。将后端部署为天蓝色会导致仅发送一些消息。仅每3-6次发送一次就没有特定类型的消息。

一些代码片段-我该怎么做:

要使其非常简单:

集线器看起来像:

public class PostHub : Hub {}

它的注册方式如下(允许cors)

app.Map("/signalr", map =>
{
    map.UseCors(new CorsOptions
    {
        PolicyProvider = new CorsPolicyProvider
        {
            PolicyResolver = context =>
            {
                var policy = new CorsPolicy();
                policy.Origins.Add("*");
                policy.AllowAnyMethod = true;
                policy.AllowAnyHeader = true;
                policy.SupportsCredentials = true;
                return Task.FromResult(policy);
            }
        }
    });
    var hubConfig = new HubConfiguration { };
    map.RunSignalR(hubConfig);
});

从controllers方法中发送消息看起来像(简化):

pubic async Task<IHttpActionResult> ChangeSomething(string id)
{
    ... update some data in the back-end if allowed and so on...

    // result = changed data from the back-end having an Id property.

    IHubContext context = GlobalHost.ConnectionManager.GetHubContext<PostHub>();
    context.Clients.All.InformToUpdateDataFor(result.Id);

    return Ok(result);
}

客户端(js)使用npm软件包Signalr版本2.3.0。正如已经提到的,它似乎可以正确接收消息(如果已发送;)

可能是什么问题?我在这里了解到其他一些类似的问题,但是它们似乎有所不同,因为发送消息和不发送消息并不确定。

1 个答案:

答案 0 :(得分:0)

我要怪自己...

我正在尝试Web应用程序的水平缩放。所以我配置为有x个实例。我忘记了我增加了实例数量,并且没有设置signalR使用服务总线。这导致了问题,Web应用程序的特定实例不了解其他实例的连接,因此我只是偶尔收到响应...

如果其他人有此问题,则只需设置一条服务总线并告知SignalR使用它...