Seria pytań uczestników, które pojawiły się podczas szkolenia .NET WCF realizowanego w dniach 22-24.03.2021 r.
Jeśli zamierzamy przekazywać do klienta informacje o błędach biznesowych, np. klient o podanym identyfikatorze nie został znaleziony lub dokument nie może zostać powtórnie zatwierdzony to w WCF należy zwracać obiekt typu FaultException.
Należy pamiętać, aby na kontrakcie ustawić:
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
Jeśli zamierzamy przekazać więcej niż sam opis tekstowy, np. kod błędu to klasa FaultException przyjmuje typ generyczny w którym możemy wskazać nasz kontrakt:
[DataContract]
public class DivideByZeroFault
{
[DataMember]
public int Code { get; set; }
[DataMember]
public string Error { get; set; }
[DataMember]
public string Description { get; set; }
}
a następnie:
public int Divide(int x, int y)
{
if (y == 0)
{
DivideByZeroFault divideByZeroFault = new DivideByZeroFault
{
Code = 101,
Error = "Divide by zero",
Description = "Nie można dzielić przez 0 w zbiorze liczb całkowitych"
};
throw new FaultException(divideByZeroFault, "DivideByZero");
}
return x / y;
}
Microsoft, wprowadzając .NET Core, zakomunikował wyraźnie, że nie będzie już wspierać tej technologii, a zamiast tego, proponuje przejście na REST API i SignalR.
Co jednak zrobić ze starszymi dużymi projektami, których migracja może być czasochłonna i kosztowna?
Społeczność wzięła sprawy w swoje ręce i owocem kilkuletnich prac jest projekt CoreWCF, który umożliwia obsługę WCF'a w .NET Core.
Właśnie została wydana oficjalna wersja CoreWCF 1.0:
https://devblogs.microsoft.com/dotnet/corewcf-v1-released/
Ale uwaga: nie są obsługiwane wszystkie mechanizmy WCF'a, dlatego warto zapoznać się z tą listą:
https://devblogs.microsoft.com/dotnet/corewcf-v1-released/#features
Dla ułatwienia migracji, wydane zostało narzędzie Upgrade Assistant:
https://devblogs.microsoft.com/dotnet/upgrading-a-wcf-service-to-dotnet-6/