Tôi mới tham gia WCF. Ban đầu tôi đã tạo một dịch vụ WCF và sử dụng proxy máy khách được tạo để tiêu thụ dịch vụ từ máy khách. Vì vậy, bất cứ khi nào tôi thực hiện một số thao tác trên dịch vụ, mọi thứ được thực hiện tuần tự khi tôi gọi các phép toán đồng bộ. Tôi đã thay đổi chế độ đồng thời thành nhiều, nhưng các thao tác vẫn diễn ra đồng bộ. Sau đó, tôi tạo các phương thức không đồng bộ cho các hoạt động của mình và sử dụng các mẫu bắt đầu/kết thúc để tôi đoán "giải phóng" kênh và cho phép các hoạt động xảy ra song song/không đồng bộ làm tăng thông lượng của các ứng dụng của tôi.WCF - nhà máy kênh và cơ sở khách hàng
Sau đó, tôi đã sử dụng ChannelFactory
để tạo kênh và thực hiện các thao tác khi máy khách và máy chủ có thể chia sẻ hợp đồng (cùng một dự án). Nhưng IClientChannel
chỉ cung cấp BeginOpen/EndOpen/BeignClose/EndClose
. Nó không có các phương thức BeginOperation/EndOperation
của . Vì vậy, về cơ bản tôi không thể thực hiện một hoạt động không đồng bộ trên kênh để giải phóng để tôi có thể sử dụng kênh để thực hiện các hoạt động khác.
Các tôi chỉ đơn giản là tạo ra các kênh cho mọi hoạt động và nó đã giải quyết được vấn đề
Vì vậy, câu hỏi của tôi là:
Đó là tốt hơn (
ClientBase vs. ChannelFactory
) wrt để kịch bản của tôi đặc biệt tôi muốn thực hiện nhiều hoạt động trên đối tượng dịch vụ đồng thời với nhiều chủ đềBạn có nên tạo kênh cho từng hoạt động không?
Thực tế, tôi nghĩ chúng tôi chỉ có thể có một kênh giữa hai điểm cuối (máy khách/dịch vụ). Nhưng tôi có thể tạo bao nhiêu kênh tùy thích. Ví dụ: Tôi có thể tạo Int16.MaxValue của kênh. Vì vậy, không chắc chắn những gì giới hạn và khuyến nghị về điều này.
Service[] channels = new IService[Int16.MaxValue]; for(int i = 0; i<Int16.MaxValue; i++) { channels[i] = factory.CreateChannel(); }
Vì vậy, về cơ bản bạn có thể vui lòng cho tôi biết về những điều cơ bản của các kênh truyền hình và các khuyến nghị và thủ thuật vv ... vv .. :)
Cảm ơn Tim. Vâng, tôi cũng đang làm điều tương tự. Tạo một kênh giao tiếp mới cho mỗi hoạt động và đóng nó lại. Tôi nhìn vào các liên kết, nhưng tôi vẫn còn một số câu hỏi.1. Bạn nên sử dụng bao nhiêu kênh? 2. Để thực hiện các hoạt động đồng bộ bằng cách sử dụng nhà máy kênh, chúng ta chỉ cần thêm các phương thức BeginOp/EndOp vào giao diện kênh. phần còn lại tất cả mọi thứ được đưa về chăm sóc bởi WCF - trong lời nói ồ ạt svcutil util tạo ra rất nhiều mã mà chúng tôi không quan tâm. chúng tôi chỉ quan tâm đến định nghĩa giao diện và để WCF thực hiện việc nâng hạng nặng. Nếu có, điều này thật tuyệt. \ – Dreamer
Câu hỏi ngoài những câu hỏi trên? – Tim
@Dreamer - Tôi không nghĩ rằng có bất kỳ số kênh được đề xuất nào. Nếu bạn có nhiều khách hàng, bạn có thể gặp sự cố kết nối đồng thời, nhưng bạn có thể điều chỉnh trong cấu hình. Đối với câu hỏi thứ hai của bạn, tôi đã không làm bất cứ điều gì async trong WCF được nêu ra (chúng tôi đang sẵn sàng để làm điều đó trong rev tiếp theo của chúng tôi tại nơi làm việc), nhưng tôi sẽ nghĩ miễn là giao diện là chính xác, bạn nên ok. – Tim