Utworzono prostą usługę wcf hostowaną w klientach IIS i wcf i zorientowałem się, że kiedy wychwycimy wyjątek FaultException z usługi wcf, a następnie wywołujemy klienta. Przerwij(), aby zwolnić sesję (jak powiedzieli próbki microsoft), nie zwalnia sesji i rozłącza się w jedenastym wywołaniu.Metoda abort() proxy klienta wcf nie zwalnia sesji po wychwyceniu wyjątku FaultException
Oto przykład:
usługi WCF:
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
}
public class Service1 : IService1
{
public string GetData(int value)
{
throw new FaultException("Exception is here");
return string.Format("You entered: {0}", value);
}
}
Klient:
class Program
{
static void Main(string[] args)
{
Service1Client client = null;
for(int i = 0; i < 15; i++)
{
try
{
client = new Service1Client();
client.GetData(100);
}
catch (TimeoutException timeoutEx)
{
Console.WriteLine(timeoutEx);
client.Abort();
}
catch (FaultException faultEx)
{
Console.WriteLine(faultEx);
client.Abort();
}
catch (CommunicationException commEx)
{
Console.WriteLine(commEx);
client.Abort();
}
}
}
}
Ale jeśli zastąpi client.Abort() z client.Close() dla catch (FaultException) wtedy wszystko działa jak czar i nie ma blokady po 11. wywołaniu wcf -usługa usługi.
Dlaczego to możliwe? Dlaczego metoda Abort() nie czyści sesji po przechwyceniu wyjątku FaultException?
Czy wystarczy skopiować wklejony go stąd? http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/f86c056a-4027-453a-a46c-fc223e03589b/ – oleksii