Tôi đang cố gắng tìm hiểu cách tôi có thể sử dụng SOAP hoặc XML-RPC để tạo API mở, từ xa cho sản phẩm của mình. Vấn đề là, một phần của API của tôi sẽ yêu cầu tôi có thể nhận các sự kiện được đẩy từ máy chủ của tôi tới máy khách - tôi sẽ cần có khả năng "gửi một cuộc gọi lại" và không chỉ "gọi hàm" như một phần của API của tôi . Có cách nào tốt để làm điều đó trong SOAP hoặc XML-RPC không?Thực hiện gọi lại trong XML-RPC hoặc SOAP
Trả lời
Có hai cách để thực hiện thông báo trong hệ thống RPC: mô hình đẩy và mô hình kéo. Trong mô hình kéo, máy khách sẽ truy vấn định kỳ máy chủ xem có thông báo nào không. Máy chủ cần lưu trữ chúng cho đến khi khách hàng tìm nạp chúng (hoặc cho đến khi hết hạn). Là một biến thể, khách hàng có thể chặn cuộc gọi RPC chặn cho đến khi sự kiện tiếp theo khả dụng và sau đó quay lại ngay lập tức. Điều đó làm việc tốt với CORBA, nhưng không hoạt động tốt với SOAP hoặc XML-RPC, vì việc triển khai HTTP thường không được chuẩn bị để lại một kết nối mở trong nhiều giờ.
Trong mô hình đẩy, nhà sản xuất sẽ gọi RPC trên người tiêu dùng, làm cho người tiêu dùng trở thành một máy chủ. Điều đó không hoạt động tốt với SOAP hoặc XML-RPC, vì khách hàng thường không được chuẩn bị để nhận vai trò máy chủ và tường lửa có thể ngăn chặn cuộc gọi lại. Vì vậy, kéo định kỳ là về cách tiếp cận thực tế nhất.
P.S. bạn có thể nhận thấy rằng tôi đã không tuân theo thuật ngữ của bạn: bạn không thể đẩy sự kiện. Một sự kiện là điều gì đó xảy ra. Bạn chỉ có thể đẩy thông báo, đây là thông tin mà một sự kiện đã xảy ra.
Bạn có thể thực hiện việc này với WCF. Tuy nhiên, tôi không biết liệu bạn có thể làm điều đó một cách tương thích hay không. Nhìn vào Duplex Services.
Ok, cuối cùng quyết định đưa ra là xử lý các cuộc gọi lại dưới dạng các API không trả lại ngay lập tức.
Về cơ bản, một yêu cầu RPC-XML sẽ được gửi, yêu cầu được thông báo về một danh sách các sự kiện nhất định. Máy chủ của chúng tôi sẽ đợi cho đến khi một trong các sự kiện xảy ra và sau đó báo cáo lại là phản hồi hoặc hết thời gian chờ sau một khoảng thời gian nhất định, thông báo rằng không có gì xảy ra. Người gọi sẽ có thể thử và gửi lại yêu cầu để tiếp tục chờ.
- 1. TPL Cách thực hiện 'Gọi lại'
- 2. Gọi lại tên gọi OpenGL không thực hiện
- 3. Làm thế nào để thực hiện cuộc gọi SOAP trong Java
- 4. Làm thế nào để thực hiện cuộc gọi SOAP trong Go?
- 5. Cách thực hiện cuộc gọi lại trong mục tiêu-C
- 6. Thực hiện chức năng gọi lại trong C
- 7. Thực hiện gọi lại phương thức trong Android
- 8. Cách thực hiện chức năng gọi lại trong Coffeescript
- 9. Làm thế nào để thực hiện một cuộc gọi dịch vụ Web SOAP từ lớp Java?
- 10. Thực hiện gọi lại từ Dịch vụ đến Hoạt động
- 11. Thực hiện cuộc gọi REST API từ IntentService hoặc AsyncTask?
- 12. Jquery - Thực hiện cuộc gọi lại sau khi gắn
- 13. Thực hiện cuộc gọi ajax trong clojurescript
- 14. gọi lại() hoặc trả về cuộc gọi lại()
- 15. iOS không gọi lại gọi lại xác thực Facebook
- 16. Gọi phương thức python từ C++ (hoặc C) gọi lại
- 17. Thực hiện cuộc gọi cURL trong C#
- 18. Xác thực SOAP bằng PHP
- 19. Cách gọi SOAP WS từ Javascript/jQuery
- 20. Chuỗi nào đang thực thi gọi lại khi thực hiện cuộc gọi Dịch vụ RIA không đồng bộ?
- 21. Đăng nhập các lệnh gọi thực hiện
- 22. Cách thực hiện các giao dịch Fragment trong FragmentPagerAdapter trong phương thức gọi lại onLoadFinish?
- 23. Bạn có thể thực hiện cuộc gọi jQuery tới dịch vụ WCF bằng SOAP và WSHttpBinding không?
- 24. Thực hiện không đồng bộ Javascript: sẽ là mã chạy lại gọi lại không?
- 25. REST vs SOAP - SOAP thực sự an toàn hơn REST?
- 26. Triển khai thực hiện cuộc gọi lại của người đăng ký Pubsubhubbub trong PHP
- 27. Cách thực hiện cuộc gọi lại javascript sau khi đăng lại bảng cập nhật?
- 28. .NET SOAP Web Service trả lại JSON
- 29. thực hiện HttpWebRequest async gọi
- 30. Cách xác định cuộc gọi được thực hiện là cục bộ hoặc STD HOẶC ISD
Điều này có nghĩa rằng về bản chất tôi bị bỏ lại với các cập nhật định kỳ, có phần lãng phí về mặt tài nguyên. Cảm ơn câu trả lời –