2009-11-26 30 views
11

Tôi ném một vài ngoại lệ xà phòng vào dịch vụ web của mình thành công. Tôi muốn nắm bắt các ngoại lệ và truy cập chuỗi và ClientFaultCode được gọi với ngoại lệ. Dưới đây là ví dụ về một trong các ngoại lệ của tôi trong dịch vụ web:Làm thế nào để bạn bắt được một ngoại lệ xà phòng ném từ một dịch vụ web?

throw new SoapException("You lose the game.", SoapException.ClientFaultCode); 

Trong ứng dụng khách, tôi cố gắng chạy phương thức từ dịch vụ web có thể ném ngoại lệ và tôi bắt được. Vấn đề là các khối catch của tôi không làm gì cả. Xem ví dụ này:

try 
{ 
    service.StartGame(); 
} 
catch 
{ 
    // missing code goes here 
} 

Tôi làm cách nào để truy cập chuỗi và mã ClientFaultCode được gọi với ngoại lệ được ném?

+0

Tôi đã vật lộn với điều này, việc tạo ra một lớp phản hồi đơn giản với thông báo lỗi là lựa chọn tốt nhất. Xem câu hỏi và câu trả lời này: http://stackoverflow.com/q/32058/945875 – Justin

Trả lời

6

Chụp phiên bản SoapException. Bằng cách đó bạn có thể truy cập thông tin của nó:

try { 
    service.StartGame(); 
} catch (SoapException e) { 
    // The variable 'e' can access the exception's information. 
} 
+2

Chỉ cần chắc chắn Lou sẽ không phá vỡ mã của mình với thay đổi này, anh ta có thể thêm một khối bổ sung 'catch (Exception e)'. đôi khi có thể là ngoại lệ không phải là 'SoapException' ... ví dụ:' OutOfMemoryException', hoặc vấn đề kết nối, hoặc hủy bỏ chủ đề, vv –

+0

Điều này hoạt động tốt. Tuy nhiên, tôi có một câu hỏi. Làm thế nào tôi có thể tìm ra chuỗi ký tự thực sự được gọi để tôi có thể truy cập nó? Ví dụ: e.GetString() hoặc một cái gì đó. Đối với ví dụ cụ thể này, tôi muốn truy cập chuỗi "Bạn mất trò chơi". – Lou

+0

Tôi có thể gọi e.Message trả về một thông báo lỗi rất dài, nhưng tôi chỉ muốn thông báo chuỗi. – Lou

1
catch (SoapException soapEx) 
{ 
    //Do something with soapEx 
} 
9

Bạn có thể muốn nắm bắt các ngoại lệ cụ thể.

try 
{ 
    service.StartGame(); 
} 
catch(SoapHeaderException) 
{ 
// soap fault in the header e.g. auth failed 
} 
catch(SoapException x) 
{ 
// general soap fault and details in x.Message 
} 
catch(WebException) 
{ 
// e.g. internet is down 
} 
catch(Exception) 
{ 
// handles everything else 
} 
+0

điều này không trả lời câu hỏi của Louise –

+0

đã thêm chi tiết trong x.Message –

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