2009-04-27 30 views
18

Tôi đã đặt một thể hiện của proxy máy khách cho dịch vụ WCF vào một thuộc tính trên lớp Ứng dụng để tôi có thể lấy nó từ bất cứ đâu trong ứng dụng.Khi nào nên đóng WCF client?

Tôi không đóng ứng dụng khách, tôi sẽ để nó mở trong suốt thời gian của ứng dụng. Lý do chính cho điều này là nếu tôi đã làm theo // Bình luận trong trang dịch vụ WCF mex (một trong những bạn nhận được nếu bạn trỏ một trình duyệt tại địa chỉ dịch vụ WCF) nó nói // Luôn đóng máy khách. client.Close();

là tốt, ngoại trừ nếu tôi gọi client.Close() ngay sau khi tôi thực hiện cuộc gọi đến phương thức client.SomeAsync() thì nó sẽ bị đóng trước khi kết quả trả về. Tôi có nên đặt cận cảnh vào phương thức Completed() không? Hoặc tôi chỉ nên quên đóng nó, khi đã đóng cửa, tôi phải tạo một phiên bản mới của proxy máy khách (có thể cũng không lưu trữ nó trong App.property nếu đúng như vậy.

thanks, Stephen

Trả lời

12

bạn nên đóng nó lại như khuyên. và vâng, nếu bạn đang sử dụng các phương pháp async sau đó bạn phải đóng nó chỉ sau khi cuộc gọi hoàn tất.

Tạo (mở) và đóng cửa khách hàng là chuẩn mực cho WCF khách hàng không có hình phạt hiệu suất đáng chú ý để liên tục tạo và đóng khách hàng mới.

+0

hãy nhớ thêm lượt cố gắng để đóng cũng vì gần có thể gây ra ngoại lệ. http://msdn.microsoft.com/en-us/library/ms405496.aspx. Tôi sử dụng nó như thế này thử { client.Close(); } bắt { khách hàng.Bên(); } –

+0

Lưu ý rằng việc gọi Dispose trên ClientBase cũng sẽ dẫn đến việc Close được gọi. –

1

E xplicitly đóng nó tốt hơn trong một {} cuối cùng của phương pháp hoàn thành của bạn. Vì bất kỳ lý do gì nếu khách hàng vẫn kết nối, bạn sẽ bắt đầu chặn các cuộc gọi khách hàng khác. Theo RFC HTTP:

Defined năm 1999 (RFC 2616) “khách hàng sử dụng kết nối liên tục nên hạn chế số lượng đồng thời kết nối mà họ duy trì đến một máy chủ cho . Một khách hàng một người dùng KHÔNG NÊN duy trì nhiều hơn 2 kết nối với bất kỳ máy chủ hoặc proxy nào. Một proxy NÊN sử dụng tối đa 2 * N kết nối với máy chủ khác hoặc proxy, trong đó N là số lượng người dùng hoạt động đồng thời. Những hướng dẫn này nhằm cải thiện thời gian phản hồi HTTP và tránh tắc nghẽn. ”Vì nhà phát triển là sử dụng yêu cầu AJAX hoặc AJAX để cập nhật trang Web giới hạn http là được thảo luận ngày càng nhiều.

Với tải nếu bạn không đóng kết nối, rất có thể bạn sẽ bắt đầu chặn. Tôi tất nhiên giả định đây là HttpBinding.

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