2011-09-02 31 views
10

Tôi có một ứng dụng sử dụng lại cùng một kênh WCF nhiều lần. Tôi giữ một tham chiếu tĩnh thông qua một đối tượng nhà máy. Tôi tự hỏi nếu điều này là tốt pratice hoặc rằng tôi nên mở x kênh và vòng robin tất cả các cuộc gọi dịch vụ trên các kênh này thay vì sử dụng các kênh đơn?Hiệu suất kênh WCF đơn so với nhiều kênh

Các cuộc gọi dịch vụ này có được xếp hàng đợi không nếu chỉ sử dụng 1 kênh hoặc thực hiện tương tự khi tôi sử dụng kênh x?

Trả lời

11

Bạn nên sử dụng một nhà máy kênh đơn cho tất cả các yêu cầu nhưng các kênh khác nhau phải được xây dựng cho mỗi yêu cầu. Không bao giờ sử dụng lại kênh. Họ không phải là đắt tiền để tạo ra và không phải là chủ đề an toàn. Cái gì đắt tiền để tạo ra là nhà máy sản xuất kênh. Đó là chủ đề an toàn và có thể được tái sử dụng. Tất nhiên nếu nhà máy sản xuất kênh đi vào trạng thái bị lỗi, bạn có thể cần phải mở lại.

+1

Vì vậy, giữ trên ICommunicationObject trả về bởi _channelFactory.CreateChannel() không phải là một ý tưởng tốt? Tôi bây giờ giữ 1 kênh mở cho tất cả các yêu cầu, tôi không làm một _channelFactory.CreateChannel() cho mỗi cuộc gọi, tôi sử dụng lại một kênh được tạo ra lần đầu tiên. –

+1

@Bjorn Bailleul, không phải là một ý tưởng tốt cả. Các thể hiện được trả về bởi '_channelFactory.CreateChannel()' nên sống càng ngắn càng tốt và không bao giờ được tái sử dụng. Như tôi đã nói, cuộc gọi 'CreateChannel' không đắt tiền. Nó rất nhanh. Bạn có thể gọi nó cho mỗi yêu cầu. Điều gì là tốn kém là việc tạo ra các nhà máy sản xuất kênh. Đây là những gì bạn có thể cache. –

+1

@Darin - Bạn có tham chiếu hoặc liên kết cho "sử dụng kênh khác cho mỗi cuộc gọi" hay không. Blog này là một trong những bài viết được tham chiếu nhiều nhất về các nhà máy kênh và thực tiễn tốt nhất đầu tiên của nó là "Sử dụng lại cùng một proxy": http://blogs.msdn.com/b/wenlong/archive/2007/10/27/performance -improvement-of-wcf-client-proxy-creation-and-best-practices.aspx – ErnieL

6

@Darin Dimitrov

Tái sử dụng proxy cùng Trong nhiều trường hợp, bạn sẽ muốn sử dụng lại cùng proxy. Điều này có hiệu suất tốt nhất. Điều này đặc biệt đúng khi bạn sử dụng các tính năng bảo mật vì thương lượng ban đầu có thể có chi phí cao.

proxy bằng kênh. nếu bạn nhìn vào this blog post, bạn sẽ nhìn thấy đoạn mã sau:

ISimpleContract proxy = factory.CreateChannel(); 
((IClientChannel)proxy).Open(); 

Hơn nữa, nếu bạn có kế hoạch để làm việc với các phiên, bạn không muốn thiết lập một phiên làm việc mới cho mỗi yêu cầu (bằng cách tạo ra một kênh mới/proxy mỗi lần).

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