Tôi đoán rằng tất cả việc thực hiện ngay lập tức ngừng và kết thúc cuộc gọi sẽ hết thời gian chờ. Điều gì xảy ra chính xác khi bạn ngừng một dịch vụ và bạn có bao nhiêu quyền kiểm soát đối với dịch vụ đó?Điều gì sẽ xảy ra nếu tôi ngừng Dịch vụ Windows trong khi đang xử lý yêu cầu WCF?
Trả lời
Khi Trình quản lý kiểm soát dịch vụ thông báo cho dịch vụ của bạn dừng, .Net ServiceBase đặt trạng thái thành SERVICE_STOP_PENDING và gọi phương thức OnStop của dịch vụ của bạn. Những gì bạn làm với thông báo đó là tùy thuộc vào bạn. Lý tưởng nhất, bạn sẽ có một số cơ chế như việc sử dụng một CancellationToken để thông báo cho bất kỳ chủ đề của bạn hiện đang làm việc mà họ cần phải quấn nó lên và thoát ra càng nhanh càng tốt. Trong trường hợp của bạn, nó có thể liên quan đến việc đóng ServiceHost của bạn. Phương thức OnStop của bạn nên chờ cho đến khi nó biết rằng nó đã được thực hiện (bằng cách tham gia các chủ đề, ví dụ) trước khi trở về. Có nhiều cách để thông báo cho Service Control Manager rằng bạn cần nhiều thời gian hơn, hoặc chỉ để cho nó biết rằng bạn đã nhận được thông báo và bạn đang tích cực làm việc để dừng (SERVICE_STATUS dwcheckpoint).
Nếu bạn vừa trở lại ngay lập tức từ OnStop (hoặc không bận tâm triển khai nó), thì tôi nghĩ rằng tất cả các chuỗi dịch vụ của bạn sẽ bị buộc chấm dứt nhanh chóng. Tôi không biết chắc chắn, bởi vì tôi chưa bao giờ thử điều này. Tôi luôn triển khai OnStop và chỉ trở lại sau khi mọi thứ được dọn sạch. Nếu bạn thực hiện OnStop, nhưng mất một thời gian rất dài để quay trở lại mà không để cho Trình quản lý điều khiển dịch vụ biết rằng bạn đang làm việc trên nó, thì nó sẽ đợi một chút (20 giây để ngừng dịch vụ ... đó là cài đặt đăng ký), và sau đó chấm dứt chủ đề của bạn.
Điều cần làm là viết dịch vụ của bạn để khởi động nhanh, dừng nhanh, tạm dừng và tiếp tục nhanh chóng, v.v. Như bạn thấy từ mô tả ở trên, chính xác những gì xảy ra trong trường hợp của bạn, phụ thuộc hoàn toàn vào cách bạn dịch vụ đã được triển khai. Chỉ có bạn mới có thông tin "biết chắc chắn".
- 1. Điều gì sẽ xảy ra khi tôi biên dịch?
- 2. Điều gì sẽ xảy ra nếu tôi ReleaseMutex() hai lần?
- 3. Điều gì sẽ xảy ra nếu dịch vụ dữ liệu đám mây Parse không thành công?
- 4. Điều gì sẽ xảy ra nếu một Dịch vụ được bắt đầu nhiều lần?
- 5. Nếu không xóa biến ThreadLocal, Điều gì sẽ xảy ra?
- 6. Trong Windows, điều gì sẽ xảy ra rõ ràng khi tôi nhấp đúp vào một tệp trong Windows Explorer?
- 7. điều gì sẽ xảy ra nếu php.ini bị thiếu?
- 8. Điều gì sẽ xảy ra nếu bạn không quay trở lại giao dịch trong Hibernate?
- 9. WCF - Yêu cầu xử lý từ nhiều máy khách
- 10. Điều chỉnh dịch vụ WCF
- 11. Điều gì sẽ xảy ra khi người dùng nhấn dừng trong trình duyệt web của họ?
- 12. Điều gì xảy ra với các yêu cầu khi tomcat dừng lại
- 13. Điều gì sẽ xảy ra khi va chạm băm xảy ra trong khóa Từ điển?
- 14. Dịch vụ WCF và Dịch vụ Windows
- 15. Trong Java, điều gì sẽ xảy ra nếu bạn sử dụng Double.NaN trong một hoạt động?
- 16. Điều gì sẽ xảy ra nếu phần đầu tiên của cấu trúc nếu là sai?
- 17. Điều gì sẽ xảy ra sau khi gói bị bắt?
- 18. Điều gì sẽ xảy ra nếu tôi gán con trỏ hàm, thay đổi số tham số
- 19. Điều gì sẽ xảy ra trong một dịch vụ gián đoạn thường xuyên?
- 20. Điều gì đang xảy ra trong __libc_start_main?
- 21. Điều gì sẽ xảy ra nếu bạn biên dịch một tệp java rỗng?
- 22. Điều gì sẽ xảy ra nếu tôi không đóng cơ sở dữ liệu trong Android?
- 23. Điều gì sẽ xảy ra nếu tôi gán một giá trị âm cho biến chưa ký?
- 24. Cách đăng nhập yêu cầu thô trong dịch vụ WCF
- 25. Điều gì sẽ xảy ra nếu thay đổi một thủ tục lưu sẵn trong khi nó đang chạy?
- 26. Điều gì xảy ra nếu lỗi mới?
- 27. Điều gì sẽ xảy ra khi Stack và Heap Collide
- 28. Rất tiếc, đã xảy ra lỗi khi xử lý yêu cầu của bạn
- 29. Điều gì sẽ xảy ra khi ném ngoại lệ C++?
- 30. Điều gì sẽ xảy ra khi mongodb hết bộ nhớ?
Dịch vụ Windows nào? Nó có phải là thứ bạn viết không? Điều này hoàn toàn phụ thuộc vào cách dịch vụ xử lý yêu cầu tắt máy. Nó có thể được viết để hoàn thành công việc hiện tại của nó hay không. – James
Bạn đã tự mình thử nghiệm chưa? Thế kết quả là gì? – Bernard
Tôi sẽ viết câu trả lời đúng ... nhưng dude ... TEST IT mình! Chỉ mất vài giây để tự mình kiểm tra. – Eiver