2

我已经广泛搜索并没有找到答案......

我需要记录从客户端发送到服务器集线器的消息何时因某种原因无法反序列化...... signalR 在幕后发生了很多事情(当然不是......人们可以轻松地使用 chrome/FF 开发人员模式来查看是什么)从客户端 POV 发生)但我想在集线器上记录序列化失败..

任何人都实现了类似的东西?

4

2 回答 2

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);
于 2013-05-27T15:16:38.237 回答
1

要在服务器上记录从客户端发送到服务器的消息的反序列化异常,您可以装饰 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 );
于 2016-03-16T09:46:49.140 回答