2009-12-30 22 views
5

Utworzono i uruchomiłem usługę Windows Service1 (z exe jako MyService.exe) przy użyciu C# 2005.. Dołączyłem metodę GetMyRandomNumber(), która zwraca losową podwójną wartość.Jak wywołać metodę z działającej usługi Windows

Problem w tym, jak można wykorzystać tę działającą usługę i jak ją nazwać.

Próbowałem dodając odniesienie MyService.exe i dostęp Sposób -

Service1 s = new Service1(); 
MessageBox.Show(s.GetMyRandomNumber().ToString()); 

Ale okazało się, że metoda ta jest wywoływana z działającej instancji usługi tj chociaż zatrzymać usługę, oświadczenia są wykonywane.

Czy ktoś mógłby mi wyjaśnić, w jaki sposób można wywołać tę metodę z uruchamiania instancji usługi.

Dziękujemy za udostępnienie cennego czasu.

Odpowiedz

14

W kodzie, nie są faktycznie wywołanie usługi, zamiast odwołujesz się do pliku wykonywalnego i wywołujesz metoda z tego zestawu (w czasie wykonywania system .NET Framework użyje lokalnego zespołu do wykonania kodu, a nie bieżącej usługi).

Aby zrobić, co chcesz, masz wiele opcji.

W .NET 2.0 używałbyś .NET Remoting. Tworzysz interfejs zdalnego sterowania, z którego inne zespoły mogą wywoływać metody w różnych plikach wykonywalnych.

W .NET 3.0, zdalne zastąpienie zostało zastąpione przez WCF. Twoja usługa stanie się usługą WCF, która naraziłaby GetRandomNumber() w ramach umowy danych. Aplikacje mogą skonsumować umowę i połączyć się z usługą, aby wywołać tę metodę.

Istnieje wiele dobrych samouczków w Internecie dla programu .NET Remoting lub jego wymiany, Windows Communication Foundation.

+2

+1 WCF byłby prawidłowym wyborem w tym scenariuszu, jeśli na .NET 3.0+. Dla kompletności chciałbym dodać, że chociaż WCF zastępuje Remoting w prawie wszystkich przypadkach, wciąż ma niszę dla komunikacji między różnymi aplikacjami - nie używałbym WCF do komunikowania się pomiędzy granicami AppDomain, ale we wszystkich innych przypadkach WCF to właściwy wybór. –

2

Komunikacja z działającą usługą nie różni się od wywoływania metod w innym uruchomionym procesie. Oznacza to, że będziesz musiał wykopać standardowe narzędzia do komunikacji między procesami.

Windows Communication Foundation (WCF) będzie moim domyślnym wyborem. Można hostować usługę WCF w usłudze systemu Windows i udostępniać ją poprzez punkt końcowy nazwanej rury w celu wydajnej komunikacji.

2

WCF będzie przesadą do komunikacji na tym samym komputerze. Pipes to prostsze i bardziej efektywne rozwiązanie.

+1

WCF może używać nazwanych potoków. http://msdn.microsoft.com/en-us/library/ms733769.aspx –

+2

Używa C# 2005 (.Net 2.0?), więc WCF nie jest opcją. – Giorgi

+1

Dobra obserwacja. Nie zauważyłem tego. –

Powiązane problemy