2012-02-27 28 views
5

Tôi đang cố tạo một số tùy chỉnh FaultException. Tôi đã thực hiện một lớp học DataContract được gọi là CreateFault.Ngoại lệ lỗi tùy chỉnh WCF không được phát hiện chính xác trong ứng dụng khách

[DataContract] 
public class CreateFault 
{ 
    private string report; 

    public CreateFault(string message) 
    { 
     this.report = message; 
    } 

    [DataMember] 
    public string Message 
    { 
     get { return this.report; } 
     set { this.report = value; } 
    } 
} 

Tôi sau đó sẽ ném lỗi theo phương thức dịch vụ.

Trong IService1.cs

[OperationContract] 
[FaultContract(typeof(CreateFault))] 
void TestFaultException(); 

và trong Service1.cs

public void TestFaultException() 
{ 
    throw new FaultException<CreateFault>(new CreateFault("CreateFault message"), "Message abt exception"); 
} 

tôi bắt FaultException trong khách hàng của tôi.

private void btnTest_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(); 
     client.TestFaultException(); 
    } 
    catch (FaultException<CreateFault> ex) 
    { 
     MessageBox.Show(ex.Detail.Message, "Success", MessageBoxButton.OK, MessageBoxImage.Error); 
    } 
    catch (FaultException ex) 
    { 
     MessageBox.Show(ex.Message, "Failure", MessageBoxButton.OK, MessageBoxImage.Error); 
    } 
    catch (Exception ex) 
    { 
    } 
} 

Hiện tại có vấn đề. Khi tôi tạo một dự án ứng dụng dịch vụ WCF trong Visual Studio 2010 nó hoạt động như mong đợi. Các lỗi được đánh bắt ở:

catch (FaultException<CreateFault> ex) 

Nhưng khi tôi tạo một dự án Thư viện dịch vụ WCF với tùy chỉnh của tôi FaultExceptions khách hàng không nhận ngoại lệ tùy chỉnh của tôi. Thay vào đó, nó sẽ gặp lỗi trong:

catch (FaultException ex) 

Tại sao nó không hoạt động với Dự án ứng dụng dịch vụ WCF?

Edit: Đây là những gì tôi nhận được trong quá trình gỡ lỗi khi nó bắt ngoại lệ trong

catch (FaultException ex) 

(gõ cũ trong cửa sổ Immediate?)

{ "Message abt ngoại lệ"}

[System.ServiceModel.FaultException<WpfApplication1.ServiceReference2.CreateFault>]: {"Message abt exception"} 
base {System.ServiceModel.CommunicationException}: {"Message abt exception"} 
Action: "http://tempuri.org/IService1/TestFaultExceptionCreateFaultFault" 
Code: {System.ServiceModel.FaultCode} 
Message: "Message abt exception" 
Reason: {Message abt exception} 

Chỉnh sửa2:

Đã tìm thấy sự cố. Tôi có hai tài liệu tham khảo dịch vụ cả hai đều có CreateFault DataContract. Và nó đã được sử dụng sai khi tôi chạy chương trình.

Khi tôi thay đổi để

catch (FaultException<ServiceReference2.CreateFault> ex) 

nó làm việc

+0

Bằng tất cả chiếm nó nên bắt ngoại lệ. Bạn có thể kiểm tra xem ngoại lệ bắt là một "FaultException " chung chung hay chỉ "FaultException". – Coder

+0

đây là những gì tôi nhận được khi tôi gõ? Ex trong Cửa sổ ngay lập tức? Ex {"Thông báo abt ngoại lệ"} [System.ServiceModel.FaultException ]: {"Thông báo abt exception"} base { System.ServiceModel.CommunicationException}: {"Message abt exception"} Hành động: "http://tempuri.org/IService1/TestFaultExceptionCreateFaultFault" Mã: {System.ServiceModel.FaultCode} Thông báo: "Thông báo ngoại lệ" Lý do: {Message abt ngoại lệ} –

+0

Tìm thấy sự cố. Tôi có hai tài liệu tham khảo dịch vụ cả hai đều có CreateFault DataContract. Và nó đã được sử dụng sai khi tôi chạy chương trình. Khi tôi thay đổi để catch (FaultException ex) nó làm việc –

Trả lời

4

Tìm thấy vấn đề. Tôi có hai tài liệu tham khảo dịch vụ cả hai đều có CreateFault DataContract. Và nó đã được sử dụng sai khi tôi chạy chương trình.

Khi tôi thay đổi để

catch (FaultException<ServiceReference2.CreateFault> ex) 

nó làm việc

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