2013-03-05 14 views
6

dokładnie przeszukałem internet (większość odsyłaczy wysłał mnie do stackoverflow;)) próbując wymyślić rozwiązanie, jak utrzymać usługę WCF przy IIS (7.5).Trzymaj usługę WCF przy życiu pod IIS

Wiele z tych odpowiedzi sugerowało napisanie aplikacji, która będzie okresowo wysyłać fałszywe zapytania do usługi WCF, aby utrzymać ją przy życiu.

Moje pytanie brzmi: co zrobić, jeśli utworzę wątek w WCF, który rozpocznie się po pierwszym wywołaniu usługi (w konstruktorze statycznym), która będzie okresowo zużywać samą warstwę WCF?

mam na myśli na przykład w C#:

while (true) 
{ 
    WebClient client = new WebClient(); 
    string returnString = client.DownloadString("http://..."); 
    Thread.Sleep(1000 * 5); 
} 

zakładając, że "http: // ..." jest URI do przewidzianego WebMethod który powraca na przykład pewną liczbę całkowitą.

Czy to działa?

Zasadniczo potrzebuję jakiejś usługi sieciowej (nie dotyczy to w szczególności WCF, ale nie usługi systemu Windows), która działa na serwerze, który wykonuje niektóre operacje i aktualizuje coś w bazie danych SQL Server. Jeśli więc opisane podejście nie zadziała, jaki może być najlepszy sposób osiągnięcia tego?

+2

Twój scenariusz? Zdecydowanie nie jest to WCF. Dlaczego nie skorzystać z usługi Win? –

+0

Ponieważ muszę też czasem przesłać do niego dane za pośrednictwem HTTP – kamilkp

+1

Ok. Jak to się wzajemnie wyklucza? Możesz mieć usługę WCF AND Win, obie używające tej samej biblioteki dla logiki biznesowej itd. Jeśli nie, dlaczego nie? –

Odpowiedz

1

Proponuję utworzyć mały program (aplikacja konsolowa), który wywołuje usługę sieciową. Program powinien przyjąć jako argumenty adres URL usługi internetowej. Następnie tworzysz zaplanowane zadanie Windows, które uruchamia program. W ten sposób masz dużą elastyczność w porównaniu z wbudowanym podejściem, o które pytasz, ponieważ program jest tylko kolejnym klientem usługi internetowej.

1

Staraj się unikać używania pętli while. Być może http://quartznet.sourceforge.net/ jest czymś, czego szukasz. W WCF rozpocznij tworzenie zadania co 10 minut, co spowoduje samo WCF.

5

AppFabric pozwala na tworzenie wcf usługi, które mogą autostart i długo żyć - to może być warto sprawdzić jako opcja hostingu (to tylko plugin dla IIS)

Auto Start

+0

Zapomniałem wspomnieć o tym, że wdrażam go na jakiejś darmowej usłudze hostingowej .NET (www.somee.com), więc nie mogę zepsuć usług IIS. – kamilkp

+0

Ah. Jeśli naprawdę chcesz wypróbować swój pomysł na wątek wywołujący usługę, warto przyjrzeć się usługom WF WCF, które obsługują sny, konwoje itp. - choć usługa Windows jest lepszym rozwiązaniem – NDJ

+0

Jeśli hostuję WCF w ramach usługi Windows, WCF będzie cały czas żywy? – kamilkp

9

Idź do IIS -> Application Pool (lub utworzyć nową) -> Ustawienia zaawansowane i ustawić interwał regulaminowym czasie = 0

enter image description here

Zobacz wątek związany here.

0

To, co robisz, jest w zasadzie złe od samego początku.

Problem jest następujący: Usługi IIS są po prostu bezpaństwowym brokerem żądań dla żądań http (podstawowe usługi IIS) i brokerem żądań dla żądań usług (usługi IIS z aplikacją AppFabric).

To, o co prosisz, to jak zmienić z natury bezpaństwowy IIS w stanowy serwer, z wiecznymi wątkami działającymi.

To nie jest to, co robi IIS, IIS obsługuje żądania, a jego AppDomain podlega WSZYSTKIM CZASOM, które zostaną zburzone (usuwając wszystkie wątki).

To sprawia, że ​​najbardziej niepoprawna odpowiedź jest niebezpieczna, ponieważ uczy, w jaki sposób wpływać na proces recyklingu, bez kontrolowania odrywania (poza domenami aplikacji i wątkami), które usługi IIS będą wykonywać osobno.

Żądający jest "obcy" dla samego IIS.

Wewnętrzny okres użytkowania usługi jest w całości zarządzany przez usługi IIS (i konfigurację jego aplikacji).

Więc jeśli z "utrzymuj przy życiu" masz na myśli: ciągłe żądanie usługi, a następnie rób tak, jak sugeruje to Andreas (utwórz zleconą pracę).

Jeśli przez "keep alive" masz na myśli: aby upewnić się, że to samo wystąpienie klasy obsługuje żądania, musisz zajrzeć do życia WCF.

Jeśli przez "utrzymywać przy życiu" masz na myśli: stworzyć stworzony przez ciebie kod "stateful" i utrzymać f.eks statycznych zmiennych przy życiu itd., Nie akceptujesz tego, że IIS jest zasadniczo bezpaństwowcem. brokera żądania z wewnętrznym zarządzaniem życiem.

Powiązane problemy