如何记录SignalR异常远程堆栈跟踪

时间:2016-02-01 10:31:09

标签: c# signalr signalr.client

我正在尝试在测试输出中记录SignalR远程堆栈跟踪异常。 最初看起来很有前景 - HubConfiguration.EnableDetailedErrors属性允许将其序列化为连线。不幸的是它不起作用。

进一步调查显示HubDispatcher将堆栈跟踪写入HubResponse,然后将其序列化为传输。在客户端,最初响应被视为字符串或JObject。然后将其反序列化为HubResponse的对应部分 - HubResult。我们来比较一下:

public class HubResponse
{
    [JsonProperty("E", NullValueHandling=NullValueHandling.Ignore)]
    public string Error { get; set; }

    [JsonProperty("D", NullValueHandling=NullValueHandling.Ignore)]
    public object ErrorData { get; set; }

    [JsonProperty("I")]
    public string Id { get; set; }

    [JsonProperty("H", NullValueHandling=NullValueHandling.Ignore)]
    public bool? IsHubException { get; set; }

    [JsonProperty("P", NullValueHandling=NullValueHandling.Ignore)]
    public object Progress { get; set; }

    [JsonProperty("R", NullValueHandling=NullValueHandling.Ignore)]
    public object Result { get; set; }

    [JsonProperty("T", NullValueHandling=NullValueHandling.Ignore)]
    public string StackTrace { get; set; }

    [JsonProperty("S", NullValueHandling=NullValueHandling.Ignore)]
    public IDictionary<string, object> State { get; set; }
}

public class HubResult
{
    [JsonProperty("E")]
    public string Error { get; set; }

    [JsonProperty("D")]
    public object ErrorData { get; set; }

    [JsonProperty("I")]
    public string Id { get; set; }

    [JsonProperty("H")]
    public bool? IsHubException { get; set; }

    [JsonProperty("P")]
    public HubProgressUpdate ProgressUpdate { get; set; }

    [JsonProperty("R")]
    public JToken Result { get; set; }

    [JsonProperty("S")]
    public IDictionary<string, JToken> State { get; set; }
}

}

正如您所见,HubResponse.StackTrace序列化为“T”json属性并反序列化为... / dev / null!

我唯一的希望是,在将响应反序列化为HubResponse之前,可以处理堆栈跟踪,同时使用原始字符串/ JObject。不幸的是,我无法找到任何此类行为的痕迹。

如果有人可以给我任何暗示,那将是非常友好的。 谢谢!

0 个答案:

没有答案