到目前为止,我使用 ServiceStack 取得了很好的效果,除了处理错误似乎很棘手。如果在消息序列化过程中出现问题(例如,因为我忘记向消息添加默认构造函数),所有客户端返回的是一条消息,表明服务器有一个内部错误和状态代码 500。添加一个监听器到Global.asax 中的 HttpApplication.Error
事件不起作用,因为它永远不会被命中。 Application_Error
也没有。这不仅不适合最终用户场景,还使调试这些错误变得非常麻烦,因为找出问题所在的唯一方法是快速观察中的这个丑陋的表达式:
Encoding.Default.GetString( ((System.IO.MemoryStream)((SyncMemoryStream)((System.Net.HttpWebResponse)(((WebException)ex).Response)).ResponseStream))._buffer)
我想要的是捕获服务器端的所有错误(无论是 ServiceStack 的序列化,还是我的服务中的错误)并将所需的信息添加到我所有的 Errors
集合中消息类型有。
最佳答案
参见 ServiceStack 的 Validation and Error handling有关 ServiceStack 中的错误处理和验证的更多详细信息的维基页面。
目前无法使用自定义逻辑处理序列化异常(尽管我现在将其添加到 TODO 列表中:)。
如果您的 Response DTO 具有 ResponseStatus 属性(即或继承自 IHasResponseStatus),ServiceStack 应自动序列化您的异常。
为了让它序列化您的 StackTrace,请在您的 AppHost.Configure() 加载脚本中使用 SetConfig() 将 DebugMode 设置为 true。
关于c# - ServiceStack:如何处理错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4692313/