当使用SignalR 2.2.0并使用带有某些Azure Service Bus实例的Microsoft ASP.NET SignalR Service Bus Messaging Backplane 时,我们在开发和生产环境中看到了奇怪的行为。一些服务总线似乎腐败并堵塞,我们看到下面描述的问题。
首先,这是我的OWIN启动代码:
public void Configuration(IAppBuilder app)
{
string connectionString = System.Configuration.ConfigurationManager.AppSettings["Microsoft.ServiceBus.ConnectionString"];
GlobalHost.DependencyResolver.UseServiceBus(connectionString, "MyApplicationName");
// Branch the pipeline here for requests that start with "/signalr"
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
//EnableJSONP = true,
EnableDetailedErrors = true
};
map.RunSignalR(hubConfiguration);
});
}
我们的问题的症状是SignalR使用任何传输连接的间歇性故障。与没有背板运行相比,性能较慢,并且在SignalR客户端上启用了详细日志记录,我看到消息" SignalR:webSockets传输在尝试连接时超时。"然后SignalR尝试通过剩余的传输(永远帧,长轮询),然后放弃。
这里是踢球者:对于我们的一些服务总线实例,性能坚如磐石,我们从未遇到过问题。其他服务总线实例会导致上述问题。
为什么我们有多条服务总线?我们只为我们的应用程序使用一个,但开发人员每个都有一个服务总线实例可供使用。它让我在晚上看到Azure Service Bus已经损坏,我不知道为什么。
问题:
答案 0 :(得分:1)
这是一个很老的帖子,但我们有一个非常类似的问题,让我们把头发拉出来。当我们将SignalR与Service Bus背板一起使用时,就会发生这种情况。
在我们的例外日志中,我们发现了以下内容:
X.509证书CN = servicebus.windows.net不在受信任范围内 人们的商店。 X.509证书CN = servicebus.windows.net链 建筑失败了。使用的证书具有信任链 无法验证。更换证书或更改 certificateValidationMode。无法构建证书链 受信任的根权威。
修复是在我们的应用启动中添加以下代码行。对我们来说,那就是global.asax.cs:
<div *ngFor="let comp of templateVals | async;let i=index">
<md-input-container class="example-90" *ngIf="comp.type=='code'">
<textarea rows="4" mdInput name="desc{{i}}" [(ngModel)]="comp.data" placeholder="Description"></textarea>
</md-input-container>
<md-input-container class="example-90" *ngIf="comp.type=='text'">
<textarea rows="4" mdInput name="text{{i}}" [(ngModel)]="comp.data" placeholder="Text"></textarea>
</md-input-container>
<md-input-container class="example-90" *ngIf="comp.type=='title'">
<input mdInput name="title{{i}}" [(ngModel)]="comp.data" placeholder="Title">
</md-input-container>
<span class="example-90" *ngIf="comp.type=='upload'">
<input-file *ngIf="!comp.data" [acceptId]="comp.id" (onFileSelect)="addedFileInfo($event)"></input-file>
<span *ngIf="comp.data">{{comp.data}}</span>
</span>
<span class="example-10">
<button md-mini-fab (click)="removeThis(comp)"><md-icon>remove circle</md-icon></button>
</span>
</div>
之后,我们的服务总线背板和SignalR完美运行。
要更深入地讨论正在发生的事情,check out this SO post。