Ứng dụng của tôi có 2 "dịch vụ", giả sử một là một máy tính cơ bản (số nguyên) và một là một máy tính dấu chấm động. Tôi thể hiện những giao diện này dưới dạng như vậy:WCF và giao diện thừa kế - Đây có phải là một điều khủng khiếp để làm?
public interface IBasicCalculator
{
int Add(int a, int b);
}
public interface IFloatingPointCalculator
{
double Add(double a, double b);
}
Tôi muốn hiển thị chúng thông qua WCF. Thật không may WCF dường như gắn chặt với khái niệm rằng mọi hoạt động có thể bạn muốn phơi bày phải trải qua một giao diện dịch vụ duy nhất - bạn không thể chia sẻ các phiên giữa các dịch vụ, nó cồng kềnh từ phía máy khách khi bạn cần tạo proxy riêng biệt cho mỗi người, dường như không có bất kỳ "dịch vụ phụ" nào, v.v ...
Vì vậy, tôi đã thu thập được rằng tôi cần trình bày một giao diện "kết hợp" (người ta cũng có thể gọi nó là một mặt tiền), như thế này:
[ServiceContract]
public interface ICalculatorService : IBasicCalculator, IFloatingPointCalculator
{
[OperationContract(Name = "AddInt")]
new int Add(int a, int b);
[OperationContract(Name = "AddDouble")]
new double Add(double a, double b);
}
Nếu tôi làm điều này, sau đó WCF cho thấy cả hai phương pháp cho khách hàng, có thể gọi cho họ, và tất cả thực sự hoạt động.
Tuy nhiên, "kế thừa giao diện" như vậy có vẻ vô ích. Riêng các new
int Add
và new
double Add
. Nói đúng ra, new
trên một phương thức chỉ ra rằng ẩn một phương thức cơ bản, mà tôi không thực sự làm gì cả. Tôi có thể bỏ qua các new
, nhưng sau đó tôi chỉ nhận được cảnh báo trình biên dịch mà số tiền "Tôi nghĩ rằng tôi đang ẩn phương pháp này, bạn cần phải đổi tên nó phương pháp hoặc đặt 'mới' vào nó".
Vì vậy, đây là một câu hỏi 2 phần:
Tôi có đi đúng hướng với 'kết hợp tất cả mọi thứ vào một giao diện' logic của tôi, hoặc là có thực sự là một cách để vạch trần "sub-dịch vụ" hoặc "nhiều dịch vụ được liên kết" bằng WCF?
Nếu đây là những gì cần phải làm, có cách nào tốt hơn không?
Cảm ơn!
Ngẫu nhiên, tôi đang sử dụng giao diện điểm đánh dấu làm cơ sở cho tất cả các hợp đồng dữ liệu của mình. Điều này cho phép tôi xử lý chung các hợp đồng dữ liệu trong khuôn khổ WCF của tôi. –
Tôi chỉ sử dụng công cụ trực quan "thêm dịch vụ tham khảo" - nó tạo ra một thư viện khách hàng - trong thư viện đó có một lớp proxy cho mỗi điểm cuối (do đó nhiều lớp trong một thư viện), nhưng tất cả các lớp "proxy" đối tượng duy nhất trên máy chủ để không quan trọng là chúng độc lập –
Tuyệt vời, vì vậy, bạn đang triển khai nhiều hợp đồng dịch vụ trên một dịch vụ duy nhất. Thật tuyệt, điều đó có nghĩa là điểm gắn bó của bạn không bao giờ về số lượng proxy, nhưng thực sự là số lượng dịch vụ, và bây giờ bạn biết cách hoàn thành những gì bạn mô tả. Mát mẻ. –