2009-07-30 29 views
5

Tôi có một lớp điều khiển mvc sử dụng dịch vụ WCF (WSHttpBinding), đôi khi có nhiều cuộc gọi trong một yêu cầu http và muốn biết cách tạo khách hàng cho dịch vụ đó tốn kém đến mức nào. Có ổn không khi tạo một cá thể của máy khách cho mọi cuộc gọi hoặc tôi có nên tạo một biến thành viên trong lớp không?WCF Client Instantiation

public class RingbacksController : Controller 
{ 
    private void LoadContactsIntoViewData(int page) 
    { 
       RingbackServiceClient client = new RingbackServiceClient(); 
     ... 
     client.Close(); 
    } 

    private void LoadGroupsIntoViewData(int page) 
    { 
       RingbackServiceClient client = new RingbackServiceClient(); 
     ... 
     client.Close(); 
    } 
} 

hoặc

public class RingbacksController : Controller 
{ 
    private RingbackServiceClient client = new RingbackServiceClient(); 

    private void LoadContactsIntoViewData(int page) 
     { 
     ... 
     client.Close(); 
    } 

    private void LoadGroupsIntoViewData(int page) 
    { 
     ... 
     client.Close(); 
    } 
} 

Trả lời

1

Nếu bạn quyết định đi với một thành viên, xin vui lòng ghi nhớ rằng một khi nó bị đứt gãy, tất cả các cuộc gọi sau đó sẽ thất bại. Đối với cho dù nó có giá trị nó, tôi đề nghị điểm chuẩn.

3

Tạo ứng dụng khách thường không phải là một hoạt động đắt tiền khủng khiếp - vì vậy bạn nên bắt đầu ngay lập tức bất cứ khi nào bạn cần (như Steven đã đề cập - nếu nó bị lỗi do lỗi, bạn vẫn cần phải làm điều đó) .

Nếu bạn đang sử dụng ChannelFactory để tạo kênh (đó là một trong những cách để làm điều đó), việc tạo ChannelFactory mặt khác là hoạt động khá nặng và tốn thời gian, vì vậy sẽ là một ý tưởng hay treo vào một cá thể ChannelFactory miễn là bạn có thể.

Marc

+0

Điều này vẫn giữ cho .NET 4.5: http://msdn.microsoft.com/en-us/library/hh314046(v=vs.110).aspx –

2

Trong quá khứ, tôi đã tạo ra một trường hợp mới của ChannelFactory <> và client/proxy cho mỗi cuộc gọi đến các dịch vụ WCF. Tôi đã không có bất kỳ vấn đề với nó, đặc biệt là không cho hiệu suất. Ứng dụng tôi đã viết đã được triển khai trên mạng nội bộ của công ty (LAN cục bộ), nơi có khoảng 30 ứng dụng Windows Forms sẽ kết nối với dịch vụ WCF của tôi.

Hãy xem câu hỏi sau Where to trap failed connection on WCF calling class? và câu trả lời của tôi cho câu hỏi đó. Về cơ bản nó là lớp bao bọc để xử lý instant/proxy instantiation và thực hiện rất nhiều lỗi cần thiết để khắc phục những thiếu sót nhất định trong thiết kế WCF (thông tin thêm trong câu hỏi được liên kết).

Bạn có thể viết lại hoặc bọc thêm trong nhà máy khác, để bạn có thể lưu trữ kênh ChannelFactory và ứng dụng khách/proxy nếu bạn lo lắng về hiệu suất. Tôi đã "nghe" rằng đó là một ý tưởng tồi để cache ChannelFactory hoặc máy khách/proxy - tuy nhiên, tôi đang mở để sửa ở đây.

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