问题
我们的signalR服务遇到一些奇怪的问题。 signalR服务有时有效,有时却无效。服务连接没有问题,但是当我们尝试调用某些方法时,出现以下错误:
在服务器上调用XXXX时发生意外错误。
我们尝试启用详细日志记录,但是错误消息是相同的。在下面的代码段中,您可以看到我们遇到的错误,此外,您还可以看到客户端在错误发生后继续对服务器进行ping操作。
我们尝试过的事情
我们用signalR设置了3种不同的环境。其中一种环境正在运行,但在其他2种环境中我们遇到了上述错误。我们尝试检查一下工作环境中的代码,使之失效,并且无法解决我们的signalR问题。到目前为止,我们尝试了什么:
signalR日志并不能告诉我们太多。这是我们从Azure上的日志中消失的消息:
“消息”:“连接异常。原因:连接ping超时。”,“类型”:“ ConnectivityLogs”,“集合”:“连接”
这是失败的方法:
public async Task AddToItemGroupTest(Guid itemId)
{
var securityLogger = await CreateSecurityLoggerForConnectionChanges(itemId);
await Groups.AddToGroupAsync(Context.ConnectionId, GetItemGroupIdentifier(itemId, _applicationSettings.EnvironmentShortName));
securityLogger.LogDataCreate($"connection to itemhub on item with id: {itemId}");
}
客户端:
NotificationService.getItemConnection().invoke("AddToItemGroup" + Constants.environmentShortName, itemId)
.then(() => {
this.addGroupToActiveGroups("item", "AddToItemGroup" + Constants.environmentShortName, itemId);
connectionChangedCallback(connectionStatus.connected);
callback();
})
.catch((error) => {
connectionChangedCallback(connectionStatus.disconnected);
console.log(`Failed adding client to group. Error: ${error}`);
throw Error(`Failed adding client to group. Error: ${error}`);
});
getItemConnection看起来像这样:
private static getItemConnection() {
if (!this.itemConnection) {
this.itemConnection = new SignalR.HubConnectionBuilder()
.withUrl(Constants.itemHubUrl, {
accessTokenFactory: () => {
return getUserAccesTokenOrForceLogin(this.authService);
}})
.withAutomaticReconnect()
.build();
}
return this.itemConnection;
}