Art*_*yom 5 javascript asp.net signalr
错误处理程序在客户端添加如下:
$.connection.hub.url = "/signalr";
$.connection.hub.logging = true;
$.connection.hub.error(function(error) {
console.log('SignalrAdapter: ' + error);
});
$.connection.hub.start().done(function() { me.onStartDone(); });
// ...
Run Code Online (Sandbox Code Playgroud)
在服务器上它是:
hubConfiguration.EnableDetailedErrors = true;
Run Code Online (Sandbox Code Playgroud)
根据文档,这应该足够了.
在我的异常中抛出它只显示它的日志文本而不调用处理程序:
[18:18:19 GMT+0000()] SignalR: ... [[[my error description here]]] ...
Run Code Online (Sandbox Code Playgroud)
在我的cshtml页面:
<script src="~/Scripts/vendor/jquery.signalR-2.1.2.js"></script>
<script src="~/signalr/hubs"></script>
Run Code Online (Sandbox Code Playgroud)
但是,如果我将错误处理程序附加到方法本身,则会调用它:
$.connection.operatorHub.server.myMethodName(someParam).fail(function(error) {
console.log("Error handler called: " + error);
});
Run Code Online (Sandbox Code Playgroud)
如何处理一般错误?
UPDATE.答案如下.另见这些:
希望它可以帮助某人.
Que*_*ger 12
我测试了一个小聊天项目(这里下载)似乎这个方法只处理连接错误.
$.connection.hub.error(function(error) {
console.log('SignalrAdapter: ' + error);
});
Run Code Online (Sandbox Code Playgroud)
我能够处理HubPipelineModule班级的所有异常.
1)我创建了一个 SOHubPipelineModule
public class SOHubPipelineModule : HubPipelineModule
{
protected override void OnIncomingError(ExceptionContext exceptionContext,
IHubIncomingInvokerContext invokerContext)
{
dynamic caller = invokerContext.Hub.Clients.Caller;
caller.ExceptionHandler(exceptionContext.Error.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
2)我添加了模块 GlobalHost.HubPipeline
// Any connection or hub wire up and configuration should go here
GlobalHost.HubPipeline.AddModule(new SOHubPipelineModule());
var hubConfiguration = new HubConfiguration { EnableDetailedErrors = true };
app.MapSignalR(hubConfiguration);
Run Code Online (Sandbox Code Playgroud)
3)我的ChatHub班级:
public class ChatHub : Hub
{
public void Send(string name, string message)
{
throw new Exception("exception for Artyom");
Clients.All.broadcastMessage(name, message);
}
}
Run Code Online (Sandbox Code Playgroud)
4)在js中我使用此代码来获取我的异常消息:
$.connection.chatHub.client.exceptionHandler = function (error) {
console.log('SignalrAdapter: ' + error);
alert('SignalrAdapter: ' + error);
};
Run Code Online (Sandbox Code Playgroud)
我在客户端上使用了错误处理,如下所示:
它适用于SignalR版本2
Hub - AppHub.cs:
public class AppHub : Hub
{
public void Send(string message)
{
throw new HubException("Unauthorized", new { status = "401" });
}
}
Run Code Online (Sandbox Code Playgroud)
客户端:
$(function () {
var appHub = $.connection.appHub;
$.connection.hub.start().done(function () {
appHub.server.send("test message")
.fail(function (e) {
if (e.source === 'HubException') {
console.error("Error message: ", e.message);
console.error("Error status: ", e.data.status);
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11548 次 |
| 最近记录: |