2009-10-06 11 views
5

Mam prawdziwą cytrynę na rękach. Mam nadzieję, że ktoś, kto ma ten sam problem lub wie, jak go naprawić, może wskazać mi właściwy kierunek.Katastrofalna awaria WCF

Setup

Próbuję utworzyć WCF Data Services, który używa modelu ADO Entity Framework do pobierania danych z bazy danych. Dodałem odwołanie do usługi WCF i wszystko wydaje się w porządku. Mam dwa zestawy wywołań usługi przesyłania danych. Pierwszy pobiera listę wszystkich "użytkowników" i zwraca (ta lista nie zawiera żadnych danych zależnych (np. Adres, kontakt itd.) Drugie połączenie to wybór "użytkownika", prośba o dodanie kilka informacji bardziej zależne, takie jak adres, dane kontaktowe, wiadomości itp dany identyfikator użytkownika. To również wydaje się działać prawidłowo.

cytryny

Po jakimś zmiany wyboru użytkownika, tj. powołanie do bardziej zależne dane od usługi danych, aplikacja przestaje odpowiadać.

Crash error:

The request channel timed out while waiting for a reply after 00:00:59.9989999. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.

I ponownie uruchomić proces debugowania, ale aplikacja nie będzie żadnej usługi transmisji danych, aż po około minutę lub tak, VS 08 wyświetli okno komunikatu z błędem:

Unable to process request from service. ' http://localhost:61768/ConsoleService.svc '. Catastrophic failure.

mam Googled piekło z tego błędu i związane z tym problemy, ale nie znalazłem nic przydatnego.

Możliwe rozwiązania

Znalazłem kilka potencjalnych klientów co do źródła problemu. W aplikacji app.config klienta:

  1. maxReceivedMessageSize> Ustaw wyższą wartość, np. 5242880.
  2. receiveTimeout> Ustaw wyższą wartość, np. 00:30:00

Próbowałem tego, ale wszystko na próżno. Podejrzewam, że istnieje podstawowy problem, którego nie można naprawić, po prostu zmieniając niektóre liczby. Wszelkie wskazówki byłyby mile widziane.

Odpowiedz

6

Rozwiązałem go = P.

Przyczyna serwis

WCF działa dobrze. To były połączenia z serwisami danych, które były winowajcą. Za każdym razem, gdy nawiązałem połączenie, stworzyłem nowe odwołanie do usługi danych, ale nigdy nie zamknąłem/usunąłem odwołania do usługi. Po kilku połączeniach usługa danych osiąga maksymalne połączenie i zatrzymuje się.

Rozwiązanie

Należy zamknąć/zbywać odniesienia usługi danych poprawnie. Najlepszą praktyką byłoby zamknięcie w instrukcji użycia.

using(var dataService = new ServiceNS.ServiceClient()) 
{ 
    // Use service here   
} 
// The service will be disposed and connection freed. 
+0

Czy Singleton z klientem jako nieruchomości i usług za pomocą odniesienia asynchroniczny stwarza problemów ??? –