2010-01-03 53 views
7

Tôi có dịch vụ WCF và ứng dụng khách. Tôi kết nối với WCF quaKiểm tra kết nối WCF

ChannelFactoryBase < (Tất < (TChannel>)>) .. ::. CreateChannel Phương pháp

Sau đó, tôi có một tham chiếu đến ICommunicationObject

dịch vụ WCF có thể không hoạt động khi kết nối hoặc đóng cửa sau. Điều gì là chính xác cách để kiểm tra xem dịch vụ WCF có hoạt động không. Một cách trực tiếp là sử dụng cơ chế CommunicationException. Nhưng những gì về ICommunicationObject.State bất động sản? Tôi có nên kiểm tra xem nó có phải là trong trạng thái bị lỗi trước khi thực hiện bất kỳ cuộc gọi phương thức WCF nào không? Thực hành tốt nhất là gì?

+0

Từ người dùng @Stix, trên [MSDN] (https://msdn.microsoft.com/en-us/library/ms733912 (v = vs.110) .aspx): Kiểm tra giá trị của thuộc tính ICommunicationObject.State là một điều kiện chủng tộc và không được khuyến khích để xác định có nên sử dụng lại hoặc đóng kênh hay không. –

Trả lời

13

Không có cách kỳ diệu nào để kiểm tra xem dịch vụ WCF có đang hoạt động hay không và đang chuẩn bị xử lý các ngoại lệ phát sinh nếu nó không hoạt động.

ICommunicationObject.State sẽ chỉ cho bạn biết rằng kênh giữa máy khách và máy chủ bị "lỗi", nếu thao tác trước đó dẫn đến lỗi và lỗi đó không được xử lý đúng trên máy chủ (và do đó kênh "bị lỗi ", ví dụ như kết xuất vô ích). Bạn có thể - nếu bạn kiểm soát cả hai đầu của dây - bao gồm một phương thức ping "giả" (hoặc một cái gì đó như trả về số phiên bản của dịch vụ) để có thể gọi một cái gì đó như thế, trước tiên hãy xem liệu kênh giao tiếp vẫn còn sống.

Nhưng sau đó: lợi ích thực sự của lần đầu tiên gọi MyService.Ping() và phải xử lý ngoại lệ có thể nếu dịch vụ không hoạt động, sau đó gọi phương thức thực tế của bạn thay vì chỉ gọi MyService.MyMethod() và xử lý bất kỳ ngoại lệ nào có liên quan?

+0

Cảm ơn, Tôi tự hỏi tại sao có ICommunicationObjectSự kiện bị chặn và thuộc tính ICommunicationObject.State cho? Nếu tôi có thể sử dụng chúng bằng cách nào đó –

+0

Sự kiện "Bị lỗi" có thể được xử lý để được thông báo ngay lập tức về một kênh bị lỗi, ví dụ: sau đó bạn có thể tạo lại proxy, ví dụ. Nhà nước có nhiều hơn chỉ là trạng thái "Faulted", nhưng nó không cung cấp bất kỳ gợi ý cho dù dịch vụ là "còn sống" hay không. –

+1

Cách gọi Proxy.Open()? –

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