Tôi đang đấu tranh với xử lý ngoại lệ bên trong Dịch vụ REST Datasnap REST của tôi (Delphi XE3 nhưng cũng đã thử với Delphi 10 Seattle). Tôi đã viết một nửa tá Dịch vụ Windows trong nhiều năm và tôi luôn bao gồm một thành phần TApplicationEvents để tôi có thể ghi lại bất kỳ Ngoại lệ Ứng dụng nào vào Nhật ký sự kiện Windows.Xử lý ngoại lệ trong Delphi Datasnap REST Server
Tuy nhiên, hành vi này không xảy ra với Dịch vụ dữ liệu. Các sự kiện TApplicationEvents.OnException không bao giờ bị sa thải, vì vậy tôi giả định một cái gì đó khác là ăn ngoại lệ và xử lý nó trước khi nó được ở đây.
Ngoại lệ được hiển thị trong kết quả của phương thức dịch vụ web, điều này có nghĩa là tôi ít nhất có thể hiển thị nội dung nào đó ở phía khách hàng, nhưng tôi cũng muốn bắt nó trước đó để tôi có thể xử lý các ngoại lệ khác nhau phía máy chủ.
Cách duy nhất phù hợp mà tôi đã quản lý cho đến nay là bọc từng phương thức riêng lẻ trong khối try..except
và xử lý ngoại lệ trong mỗi phương pháp, trước khi tăng lại ngoại lệ. Tuy nhiên, với một dịch vụ Web gồm 20 phương pháp và đang phát triển, điều này không thực sự mở rộng.
Tôi cũng đã thử triển khai OnError, OnTrace và các sự kiện khác của một số thành phần Datasnap (TDSServer, TDSHTTPService, TDSTCPServerTransport, v.v.) nhưng chúng chưa bao giờ bị sa thải.
Có ai đi qua bất cứ điều gì như thế này không?
Có liên quan (đối với Java): [Cách lấy các ngoại lệ chưa nắm bắt trong ứng dụng web Java servlet] (http://stackoverflow.com/questions/7410414/how-to-grab-uncaught-exceptions-in-a-java -servlet-web-application) Có thể một giải pháp tương tự là có thể. (nếu có cơ chế lọc yêu cầu chung trong Datasnap) – mjn