Tôi có một dịch vụ web ASP.NET Web API mà ném một SerializationException trong trường hợp nhất định. Vấn đề là tôi không thể bẫy và đăng nhập ngoại lệ phía máy chủ này - nơi duy nhất nó xuất hiện trong phần thân của phản hồi HTTP cho máy khách.Làm thế nào để bẫy một ngoại lệ Serialization trong Web API?
Tôi đã đăng ký ExceptionFilterAttribute
như được mô tả trong và xác minh rằng nó hoạt động đúng khi tôi ném ngoại lệ trong bộ điều khiển của mình. Thật không may là SerializationException đang được ném trong phản hồi (sau khi bộ điều khiển) và dường như được nuốt hoàn toàn bởi ASP.NET. Tôi cũng đã thử hooking Application_Error()
trong Global.asax.cs nhưng nó cũng không hiển thị ở đó.
Làm cách nào để nhận ngoại lệ SerializationException trong phản hồi API Web?
Hoàn hảo! Tối ưu hóa nhẹ, tôi đã thực hiện hành động không đồng bộ và chờ LoadIntoBufferAsync để không chặn luồng. – Mike
@Mike Rất có thể là LoadIntoBufferAsync chỉ di chuyển byte xung quanh trong bộ nhớ trong quá trình tuần tự hóa, vì vậy bạn có thể không thực hiện bất kỳ IO nào. Do đó bằng cách làm cho nó không đồng bộ, bạn chỉ cần chuyển từ một thread thread thành thread thread thread khác, mà thực sự sẽ gây bất lợi cho perf. Tuy nhiên, ff bạn biết rằng định dạng của bạn sẽ bị chặn chờ IO sau đó async có thể giúp đỡ. –
Tôi chắc chắn không phải là một chuyên gia về Wait vs await, nhưng sự hiểu biết của tôi là Wait() chặn luồng hiện tại trong khi Task thực thi trên một luồng khác. chờ đợi cũng chặn các thread hiện tại nhưng nó không như vậy không đồng bộ, giải phóng các chủ đề để làm những việc khác và sau đó tiếp tục khi nhiệm vụ hoàn thành. Cả hai trường hợp liên quan đến một chuyển đổi chủ đề vì vậy tôi nghĩ rằng hiệu suất sẽ được tương tự, nhưng cách tiếp cận async cho phép (hơi) khả năng mở rộng hơn. Như tôi đã nói, kiến thức của tôi về điều này là sơ sài nên có lẽ chúng ta nên hỏi Stephen Toub. :) – Mike