InvokeAsync是间歇性的

时间:2019-06-27 09:00:36

标签: signalr.client asp.net-core-signalr

有时我的signalr .net客户端的InvokeAsync方法有效,有时却无效。

在我的startup.cs中,我有一个.net核心2.2项目,该项目具有Azure SignalR服务中心,我将其设置如下:

services.AddSignalR(o => o.EnableDetailedErrors = 
true).AddAzureSignalR(connstring);

app.UseAzureSignalR(route =>
{
    route.MapHub<FooBarHub>("/foobarhub");
});

我有一个.net客户端项目,它是一个Winform应用程序(.net 4.6.1),它建立了如下连接:

connection = new HubConnectionBuilder().WithUrl($" 
{serviceHost}/AgentHub").Build();

启动时,我打电话:

await connection.StartAsync();

并可以看到状态为已连接。

然后我想从客户端调用集线器上的方法,以便在客户端中执行此操作:

string myIdString = await connection.InvokeAsync<string> 
("RegisterSignalRId", foobarId);

应该在我的服务器中心中点击我的方法:

public string RegisterSignalRId(string foobarId)
{
    myService.RegisterSignalRId(this.Context.ConnectionId, foobarId);
    return this.Context.ConnectionId;
}

我的问题是,有时当我启动Winform应用程序时,我将myIdString设置为null,它根本没有达到服务器中心方法中的断点,但是有时它确实起作用,并且我得到了真实的/正确的值。

我不能始终如一地使它工作或失败,这似乎是随机的。

1 个答案:

答案 0 :(得分:1)

所以答案是我已经签入(以进行源代码控制)我的azure服务的连接字符串,因此其他开发人员也正在使用它,并将他们的API服务版本指向该azure服务。因此,当我运行我的代码时,有时azure会使用新方法打入我的API服务,并且会起作用,有时它会打入其他人的api,因此失败,因为他们的代码中没有新方法。