.NET WCF (marzec 2021)

Seria pytań uczestników, które pojawiły się podczas szkolenia .NET WCF realizowanego w dniach 22-24.03.2021 r.


W jaki sposób powinno się obsługiwać błędy w WCF?

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;
        }
 

Czy WCF jest wspierany w .NET Core?

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/