Wcf'den iş istisnası nasıl alınır?

Bu istisnayı bir WCF çağrısından döndürülmüş olarak nasıl test edebilirim?

Bu hata sınıfım var.

[Serializable]
public class PermissionDenied_Error : Exception
{
    public PermissionDenied_Error() : base("You are not approved.") { }
}

Hizmetimde, onu fırlatıyorum.

if (notApproved)
{
    throw new FaultException(new PermissionDenied_Error()
              , new FaultReason("Permissions Denied!"));
}

Benim testimde, bunu bekliyorum.

[Test]
[ExpectedException(typeof(FaultException))]

Mevcut sonuç:

Expected: System.ServiceModel.FaultException`1[[PermissionDenied_Error
    , Project.API, Version=1.0.4318.24332, Culture=neutral, PublicKeyToken=null]]
 but was: System.ServiceModel.FaultException : Permissions Denied!
2

3 cevap

PermissionDenied_Error kodunuz bir veri sözleşmesi olmalıdır. İstisnadan çıkarılmamalıdır.

Ayrıca, iş sözleşmenizin FaultContractAttribute değerini, istemcinin bir istisna beklediğini bilmesi için yerleştirmeniz gerekir.

Valamas tarafından eklendi

public interface IAccess
{
        [OperationContract]
        [FaultContract(typeof(PermissionDenied_Error))]
        DtoResponse Access(DtoRequest request);
}
3
katma
Şimdi bunun doğru cevap olduğunu anlıyorum. Cevabınızı düzenledim, böylece kod doğru şekilde görüntüleniyor.
katma yazar Valamas, kaynak

WCF'de sadece böyle çalışmıyor.

there are articles around explaining how to setup and use FaultExceptions

check this step by step here: Exception Handling in Windows Communication Framework and Best Practices

2
katma

ExpectedException özelliğini kullanmak kötü bir uygulamadır. Bunu kullanmak yerine:

[Test]
[ExpectedException(typeof(FaultException))]

yapmayı dene:

[Test]
public void Test1()
{
    .....
    try{
       WfcServiceCall(...);
       Assert.Fail("a FaultException was expected!");
    }catch(FaultException){
       Assert.Sucess();
    }catch(Exception e){
       Assert.Fail("Unexpected exception!")
    }
}
1
katma
Bu cevap soruyu ele almıyor.
katma yazar Phil Degenhardt, kaynak