I zostały przekazanie zamykania i przerywania kanałów w następujący sposób:Czy jest możliwe, aby kanał WCF powodował błąd po sprawdzeniu stanu (pojedynczy wątek)?
public async Task<MyDataContract> GetDataFromService()
{
IClientChannel channel = null;
try
{
IMyContract contract = factory.CreateChannel(address);
MyDataContract returnValue = await player.GetMyDataAsync();
channel = (IClientChannel);
return returnValue;
}
catch (CommunicationException)
{
// ex handling code
}
finally
{
if (channel != null)
{
if (channel.State == CommunicationState.Faulted)
{
channel.Abort();
}
else
{
channel.Close();
}
}
}
}
przyjmować tylko pojedyncze nitki wykorzystuje kanał. Skąd wiemy, że kanał nie będzie miał błędów po sprawdzeniu stanu? Jeśli coś takiego miało się stać, kod spróbowałby Close() i Close() rzuciłby wyjątek w bloku finally. Wyjaśnienie, dlaczego jest to bezpieczne/niebezpieczne, a przykłady lepszej i bezpieczniejszej metody zostałyby docenione.
Nie jestem pewien, czy rzut Zamknij, jeśli drugi koniec kanału nagle ulegnie uszkodzeniu? Umieść punkt przerwania tuż przed zamknięciem, zamknij usługę i sprawdź, czy zamknie się rzut Zamknij. – asawyer
Dobra sugestia, chory, spróbuj, kiedy dostanę szansę później dzisiaj. Ale musiałbym przetestować, czy na prawie każdym stosie kanałów, który używam, aby być bezpiecznym, czy nie? – insipid
W dużym stopniu korzystam z usług WCF w produkcji na żywo i nigdy nie widziałem żadnych błędów z klas obsługi usług. Zostały one nazwane 2 + milion razy w ciągu ostatnich 8 miesięcy. Wydaje się, że jest ok, ale twoje pytanie jest interesujące, nie myślałem o tym, więc nigdy nie próbowałem się dowiedzieć ... – asawyer