Tôi đã tìm kiếm ở khắp mọi nơi để tìm hiểu cách bắt loại hợp đồng lỗi cơ sở trong C#. Tôi muốn có tất cả các hợp đồng lỗi của tôi kế thừa từ một lớp và có một catch (FaultException fex) trong bộ điều khiển MVC.C# WCF bắt ngoại lệ lỗi của loại cơ sở
DataContracts
[DataContract]
public class BaseClass1
{ }
[DataContract]
public class Class2 : BaseClass1
{ }
Dịch vụ
[ServiceContract]
public interface IService1
{
[OperationContract]
[FaultContract(typeof(BaseClass1))]
[FaultContract(typeof(Class2))] //Do I need this one?
void ThrowClass2();
}
public class Service1 : IService1
{
public void ThrowClass2()
{
throw new FaultException<Class2>(new Class2(), "Class2 Reason");
}
}
Dịch vụ tiêu dùng
FaultTestService.Service1Client client = null;
try
{
client = new FaultTestService.Service1Client();
client.ThrowAmpFaults("InvalidParameter", 0);
}
catch (FaultException<Namespace.BaseClass1> fex)
{
//DOES NOT GO IN HERE AS I WOULD EXPECT
}
catch (FaultException fex)
{
//Other Possible Option
MessageFault fault = fex.CreateMessageFault();
var fe1 = fault.GetDetail<BaseClass1>();
//This throws a serialization exception it needs <Class2>
}
Xin vui lòng cho tôi biết nếu một trong những phát biểu khai thác này có thể được cố định để làm những gì tôi đang tìm kiếm.
Nhưng lý do của hành vi này là gì? –