Ngay cả khi nó có thể về mặt kỹ thuật, nó thực sự không phải là một ý kiến hay! Một trình kích hoạt phải rất gọn gàng, và nó chắc chắn không nên liên quan đến một hoạt động dài dòng (mà một cách gọi dịch vụ web chắc chắn là như vậy)! Suy nghĩ lại kiến trúc của bạn - nên có một cách tốt hơn để làm điều này!
Đề xuất của tôi là tách nhiệm vụ "thông báo" rằng bạn cần gọi dịch vụ web, trong trình kích hoạt của bạn, với việc thực hiện thực tế lệnh gọi dịch vụ web đó.
Một cái gì đó như:
-
trong mã kích hoạt của bạn, hãy chèn "thực hiện gọi dịch vụ web sau" vào bảng (chỉ
INSERT
để giữ cho nó gọn gàng và nhanh chóng - vậy thôi) -
có một dịch vụ không đồng bộ (một công việc SQL, hoặc tốt nhất là một Dịch vụ Windows NT) thực hiện các lệnh gọi đó riêng biệt với việc thực thi trình kích hoạt thực tế và lưu trữ bất kỳ dữ liệu nào được truy xuất từ dịch vụ web đó vào các bảng thích hợp trong cơ sở dữ liệu của bạn.
Trình kích hoạt là một thứ rất phức tạp - nó phải luôn rất nhanh, rất gọn - thực hiện INSERT
hoặc tối đa là hai - và bằng mọi cách, tránh con trỏ trong trình kích hoạt hoặc các thao tác kéo dài khác (như lệnh gọi dịch vụ web)
Brent Ozar có một webcast tuyệt vời (được trình bày tại SQL PASS) trên 10 sai lầm hàng đầu của nhà phát triển không quy mô và kích hoạt là điều đầu tiên anh ấy tập trung vào! Rất khuyến khích