2009-08-20 35 views
6

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

7

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.

+0

Đ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 –

0

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.

1

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ờ.

Các vấn đề liên quan