2010-12-12 9 views
5

Mamy usługę .net z prostymi poleceniami (odtwarzanie, pauza, następny utwór, na przykład). Jest on instalowany na stacjach roboczych użytkowników z własnymi danymi uwierzytelniającymi (na przykład FooServiceUser). Jeśli chcę dać użytkownikom aplikację, która może wysyłać polecenia do usługi, jaki byłby najlżejszy sposób na zrobienie tego? Pamiętaj, że chcę wysyłać polecenia z pojedynczej stacji roboczej do procesu uruchomionego na tej samej stacji roboczej. Polecenia są bardzo proste. Również aplikacja musi otrzymać status z usługi. tzn. wstrzymany, odtwarzanie utworu 21.Jaki jest najlżejszy sposób, aby mieć dwie aplikacje .net ze sobą rozmawiać?

Powinien być łatwy, prawda? WCF wygląda na skomplikowany i przesadny. Wszyscy na SO mówią, że remotowanie .net jest złe. Nie chcę instalować MSMQ. Każda wzmianka o gniazdach ma wynik negatywny.

+1

Jaką "wagę" chcesz zachować, aby była "lekka"? Rozmiar ładunku wdrożenia? LOC? Krzywa uczenia się? – AakashM

+0

Światło oznacza, łatwy do nauczenia, zrozumienia i ma niewiele na drodze do niewłaściwego. Przechodzę z wersji C++ win32. Tak więc poszukiwałem odpowiednika nazwanych rur. Zamiast tego widzę całe książki warte dodatkowych rzeczy, mnóstwo informacji o technologiach, których prawdopodobnie nie potrzebuję. –

+0

Przepraszam, chciałem też dodać, mało miejsca na pamięć. –

Odpowiedz

6

Dla pełnego, łatwego w użyciu rozwiązania polecam WCF. Obsługuje protokół kanału pamięci (ICP) dla tej aplikacji.

Pozostaje to, co nazwałbyś "lekką". Część hostująca WCF może być wykonana w około 5 liniach kodu. Generowany jest cały kod po stronie klienta. Czy naprawdę zależy Ci na liczbie i rozmiarze zestawów, których musisz użyć (już zainstalowanych) lub na liczbie funkcji, które zignorujesz?

Wystarczy użyć WCF.
Pozwoli to łatwo skalować się do gniazd i komputera, jeśli zajdzie taka potrzeba.

+2

WCF jest generalnie bardzo prosty w implementacji. – jle

+4

"Część hostująca WCF może być wykonana w około 5 liniach kodu", co nie przekłada się na lekkość. – Aliostad

+0

@aliosta, może, ale co robi? –

6

bym absolutnie wspomniany Remoting została zastąpiona i używać WCF z wiążących nazwany potok, ale teraz, kiedy mówimy o lightweightness, muszę powiedzieć Remoting jest lekki i nie będzie nigdzie od komunikacji między dwoma AppDomains są zwykle przez remoting . Tak naprawdę jest to wybór ważny.

Mimo, że biorąc pod uwagę elastyczność WCF , ja i tak polecam - choć jest ciężki, masywny i sposób rozgotowane.

+1

Powiedziałbym, że Remoting został asymilowany (styl Borg) w WCF, czy naprawdę popierasz zastosowanie przestarzałej technologii? Czym dokładnie byłyby "lekkie" zalety? –

+0

IpcChannel to nazwany kanał rurowy dla Remotingu –

+1

Abstrakcje wbudowane w WCF są zbyt ciężkie i rozgotowane.Stos jego kanałów jest wypełniony tak wieloma rzeczami. Niektórzy nazywają bogatym WCF, nazywam to przesadnym. – Aliostad

2

Jeśli aplikacja znajduje się na tym samym komputerze, co usługa Windows, prawdopodobnie nie musisz się martwić o używanie usług zdalnych, usług internetowych itd., Ponieważ można utworzyć instancję ServiceController Class i użyć jej metody ExecuteCommand.

+0

Ciekawe, nie wiedziałem, że możesz to zrobić ... Wydaje się jednak dość ograniczony (nie ma możliwości przekazania argumentów do polecenia, ograniczona liczba poleceń ...) –

+0

Jak to działa? poziom bezpieczeństwa? Wszyscy użytkownicy powinni mieć możliwość wysyłania "gry" lub "pauzy", ale nie mogą zatrzymywać ani uruchamiać usługi ani mieć wpływu na inne usługi. –

+0

Uzgodniono, że brak parametrów i określona liczba poleceń są przytłaczającymi ograniczeniami w niektórych sytuacjach, ale dobrze pasuje do innych. Usługi systemu Windows są obsługiwane przez listy kontroli dostępu, które również zabezpieczają pliki i katalogi. Użytkownicy będą musieli mieć uprawnienia do uruchamiania i zatrzymywania, aby móc uruchomić i zatrzymać usługę, ale chcesz wysłać numer polecenia, który reprezentuje Start, Stop, Pause itp. Uprawnienie kontroli zdefiniowanej przez użytkownika byłoby prawdopodobnie wymagane. wyślij mu polecenie. – N0Alias

1

WCF jest lekki pod względem tego, w jaki sposób linie kodu potrzebuję, aby moja komunikacja została wykonana. Nie jest to bardzo lekki pod względem szybkości wykonania i zużycia pamięci. WCF jest bardzo prosty w użyciu. Ale jego rozszerzalna architektura sprawia, że ​​czasami trudno jest znaleźć właściwą klasę.

Praca w trybie zwykłego gniazda nie jest lekka pod względem wydajności kodowania, ale jest lekka pod względem działania w czasie działania. Masz absolutną pełną kontrolę nad każdym bitem, kiedy kanały są otwierane lub zamykane i takie tam.