是否有可能捕获/记录SignalR序列化问题?

时间:2013-05-27 14:45:30

标签: asp.net signalr

我搜索得相当广泛,并没有找到答案......

我需要记录从客户端发送到服务器集线器的消息由于某种原因而无法反序列化...所以很多信号发生在封面下(好吧不是真的......可以很容易地使用chrome / FF开发人员模式看看客户POV发生了什么,但我想在集线器上记录序列化失败。

任何实现过类似的东西?

2 个答案:

答案 0 :(得分:2)

回答我自己的问题......这确实有帮助

http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-net-client#handleerrors

不完全捕获错误服务器端,但返回给客户端的错误详细信息更加详细,让我可以轻松看到类型不匹配..

var hubConfiguration = new HubConfiguration();
hubConfiguration.EnableDetailedErrors = true;
RouteTable.Routes.MapHubs(hubConfiguration);

答案 1 :(得分:0)

要在服务器上记录从客户端发送到服务器的消息的反序列化异常,您可以修饰SignalR附带的DefaultParameterResolver。

创建一个装饰的IParameterResolver,记录异常并调用DefaultParameterResolver

    public class LoggedParameterResolver : IParameterResolver 
    {
       private readonly DefaultParameterResolver _parameterResolver;
       private readonly ILogger _logger;

       public LoggedParameterResolver(DefaultParameterResolver parameterResolver, ILogger logger)
       {
        _parameterResolver = parameterResolver;
        _logger = logger;
       }

       public IList<object> ResolveMethodParameters(MethodDescriptor method, IList<IJsonValue> values)
       {
        try
        {
            return _parameterResolver.ResolveMethodParameters(method, values);
        }
        catch (Exception exception)
        {
            _logger.LogException(exception);
            throw;
        }
      }
    }

并配置SignalR以使用它

IParameterResolver loggedParameterResolver = new LoggedParameterResolver(new DefaultParameterResolver(), logger);
GlobalHost.DependencyResolver.Register(typeof(IParameterResolver),()=> loggedParameterResolver );