C# WPF应用程序中的FaultException仍在WCF服务中引发错误

C# WPF应用程序中的FaultException仍在WCF服务中引发错误,c#,wpf,wcf,faultexception,C#,Wpf,Wcf,Faultexception,我正试图在我的WCF服务中创建一个FaultException,以便在我的WPF应用程序中显示错误。我遇到的问题是FaultException仍然显示/崩溃到我的服务,并且不希望在我的WPF应用程序(在messagebox中)中显示错误 这是我的代码: 服务: public void AddNewSupplier(SupplierData Data) { using (Database db = new Database()) { var supplier = n

我正试图在我的WCF服务中创建一个FaultException,以便在我的WPF应用程序中显示错误。我遇到的问题是FaultException仍然显示/崩溃到我的服务,并且不希望在我的WPF应用程序(在messagebox中)中显示错误

这是我的代码:

服务

public void AddNewSupplier(SupplierData Data)
{
    using (Database db = new Database())
    {
        var supplier = new Supplier
        {
            Name = Data.Name,
            Address = Data.Address,
            ContactNumber = Data.ContactNumber,
            Description = Data.Description,
            Terms = Data.Terms
        };
        if (db.Supplier.Any(sup => supplier.Name.Contains(sup.Name)))
        {
            throw new FaultException(new FaultReason("The database already contains the name " + supplier.Name + ". Please enter a diffirent name"), new FaultCode("Multiple Items"));
        }
        else
        {
            db.Supplier.Add(supplier);
            db.SaveChanges();
        }
    }
}
private void btnAdd_Click(object sender, RoutedEventArgs e)
{
    using (MKCServiceClient service = new MKCServiceClient())
    {
        try
        {
            service.AddNewSupplier(new SupplierData
            {
                Name = txtName.Text,
                Address = txtAddress.Text,
                ContactNumber = txtContactNumber.Text,
                Description = txtDescription.Text,
                Terms = txtTerms.Text
            });                
        }
        catch (FaultException fe)
        {
            if (fe.Code.Name == "Multiple Items")
                MessageBox.Show(fe.Reason.ToString());
        }
    }
}
客户端应用程序

public void AddNewSupplier(SupplierData Data)
{
    using (Database db = new Database())
    {
        var supplier = new Supplier
        {
            Name = Data.Name,
            Address = Data.Address,
            ContactNumber = Data.ContactNumber,
            Description = Data.Description,
            Terms = Data.Terms
        };
        if (db.Supplier.Any(sup => supplier.Name.Contains(sup.Name)))
        {
            throw new FaultException(new FaultReason("The database already contains the name " + supplier.Name + ". Please enter a diffirent name"), new FaultCode("Multiple Items"));
        }
        else
        {
            db.Supplier.Add(supplier);
            db.SaveChanges();
        }
    }
}
private void btnAdd_Click(object sender, RoutedEventArgs e)
{
    using (MKCServiceClient service = new MKCServiceClient())
    {
        try
        {
            service.AddNewSupplier(new SupplierData
            {
                Name = txtName.Text,
                Address = txtAddress.Text,
                ContactNumber = txtContactNumber.Text,
                Description = txtDescription.Text,
                Terms = txtTerms.Text
            });                
        }
        catch (FaultException fe)
        {
            if (fe.Code.Name == "Multiple Items")
                MessageBox.Show(fe.Reason.ToString());
        }
    }
}

我可能做错了什么?

能否将断点放在捕获(…)区域?
fe.code.Name
property的实际值是多少?

让我快速检查;)好的,当我在
fe.code.Name
上放置断点时,它会在我的服务中抛出错误,然后在我的应用程序中打开
MessageBox.Show
,但是当我删除断点时,它在我的服务中抛出异常,由于某种原因,它被困在
else
,并且没有运行所有代码…尝试将Catch(…)中的FaultException类型更改为just exception类型。可能还有另一个异常?对不起,我不能这样做,因为我要从我的服务模型中获取所有数据,我需要使用
FaultException
,否则我根本无法捕获异常。只有在服务器端逻辑中异常“未处理”的情况下,WCF异常才会出现。因此,如果你有一个家长级别的try/catch,那么你也需要将其转发给客户谢谢你的评论@pnm-父级尝试/捕获?在我的
AddNewSupplier
方法中没有其他try-and-catch,我的应用程序中只有try/catch可以正常工作,但服务异常仍然会首先抛出,而它根本不应该被抛出。您的服务异常是否会传递给客户端?如果是这样,它可能会包装您的错误异常。检查服务异常的InnerException属性。它会到达客户端,但前提是我在客户端的方法中插入断点。否则,我的服务中的InnerException是
null
。请注意,“throw”本质上是一个返回语句。调试器将有效地“跳出”。