2009-02-19 37 views

Trả lời

9

Khi bạn gọi số Client.Open nếu nó không hoạt động, bạn nên ném một ngoại lệ mà bạn có thể bẫy.
Điều tôi thích làm là triển khai phương thức trả về boolean có tên Ping. Mã cơ bản chỉ cần return true; để mã trả về càng nhanh càng tốt. Về phía khách hàng, tôi gọi nó và bẫy các ngoại lệ, nếu tôi nhận được bất kỳ thì tôi biết dịch vụ web đã ngừng hoạt động.
Bạn có thể mở rộng mẫu để thực hiện những việc như PingCheckDB hoặc PingCheckX có thể chạy thử nghiệm giả/mẫu để bạn bật/tắt chức năng trên máy khách dựa trên những gì có sẵn.

+0

Bất kỳ mã mẫu nào, vui lòng. Cảm ơn –

+1

@Alhmabra phương thức sẽ trông giống như công khai bool Ping() { trả về true; } Thực sự không phải là phương pháp thú vị nhất. –

+0

Mở() không ném ngoại lệ khi tôi tắt mạng. – nurettin

7

Để xây dựng dựa trên câu trả lời trước: cách duy nhất để xác định xem dịch vụ có "khả dụng" hay không là trước tiên hãy xác định ý bạn là "có sẵn". Ví dụ, một dịch vụ phụ thuộc vào một tài nguyên bên ngoài như một cơ sở dữ liệu có thể hoàn toàn có sẵn, nhưng nếu cơ sở dữ liệu không thể được truy cập, thì dịch vụ sẽ có sẵn nhưng vô dụng.

Bạn cũng nên hỏi bạn sẽ làm gì với thông tin về tính khả dụng. Đặc biệt, điều gì sẽ xảy ra nếu bạn quyết định rằng dịch vụ là "có sẵn", khi bạn gọi nó, bạn thấy rằng nó không thực sự "có sẵn". Một ví dụ sẽ là nếu các dịch vụ trên đã có sẵn và cơ sở dữ liệu đã có sẵn, nhưng có một thủ tục được lưu trữ đặc biệt mà sẽ luôn luôn thất bại. Là dịch vụ "có sẵn" trong trường hợp này? Làm thế nào xấu nó sẽ được nếu bạn chỉ ra rằng nó đã có sẵn, nhưng thủ tục này được lưu trữ không thành công?

Trong nhiều trường hợp, tốt nhất là bạn chỉ cần tiếp tục và thực hiện cuộc gọi đến dịch vụ web, sau đó xử lý mọi ngoại lệ. Nếu bạn đã xác thực các thông số mà bạn đang gửi đến dịch vụ, thì, từ quan điểm của người dùng cuối, bất kỳ sự thất bại nào của số tiền dịch vụ đối với dịch vụ không khả dụng.

Không có sẵn để sử dụng thành công, bạn sẽ thấy.

0

Đây là những gì tôi đang sử dụng và nó hoạt động tuyệt vời. Và ServiceController tồn tại trong không gian tên 'System.ServiceProcess' nếu bạn muốn sử dụng câu lệnh Sử dụng ở trên cùng để đủ điều kiện.

try 
{ 
    ServiceController sc = new ServiceController("Service Name", "Computer's IP Address"); 
    Console.WriteLine("The service status is currently set to {0}", 
     sc.Status.ToString()); 

    if ((sc.Status.Equals(ServiceControllerStatus.Stopped)) || 
     (sc.Status.Equals(ServiceControllerStatus.StopPending))) 
    { 
     Console.WriteLine("Service is Stopped, Ending the application..."); 
     Console.Read(); 
     EndApplication(); 
    } 
    else 
    { 
     Console.WriteLine("Service is Started..."); 
    } 
} 
catch (Exception) 
{ 
    Console.WriteLine("Error Occurred trying to access the Server service..."); 
    Console.Read(); 
    EndApplication(); 
} 
0

Tôi sử dụng mã sau đây. Nó đơn giản và hoạt động ...

public bool IsServiceRunning() 
    { 
     try 
     { 
      System.Net.WebClient wc = new System.Net.WebClient(); 
      string s = wc.DownloadString(new Uri("http://localhost:27777/whatever/services/GatherDataService?wsdl")); 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 

     return true; 
    } 

chỉ mất uri endpoint của bạn và thêm? Wsdl

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