我正在尝试在测试输出中记录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。不幸的是,我无法找到任何此类行为的痕迹。
如果有人可以给我任何暗示,那将是非常友好的。 谢谢!