2009-08-04 17 views
15

Więc projektuję usługę WCF. Nie mam doświadczenia z WCF i próbuję zdecydować, czy powinien on być hostowany w IIS, czy niestandardowej usłudze Windows. Czy może inna opcja?Czy powinienem hostować moją usługę WCF w IIS?

warte rozważenia:

  • Trzeba załadować dane z bazy danych na starcie.
  • Musi przechowywać te dane w poprzek żądań, a nie ładować go za każdym razem.
  • Musi przetwarzać wiele żądań jednocześnie.
  • Musi być konfigurowalny, jak to możliwe w odniesieniu do punktów końcowych.
  • To będzie wywoływać natywne biblioteki dll całkiem sporo.

Podejrzewam, że hostowanie go w IIS uprościłoby pewne rzeczy, ale nie jestem pewien, czy byłby to dobry pomysł w tej sytuacji.

Jakie są moje opcje i jakie są ich zalety i wady?

Odpowiedz

16

Trzeba po prostu patrzeć na trzech opcji:

1) hostingu w IIS6 (Windows Server 2003/2003 R2): w tym scenariuszu można tylko obsługiwać protokoły HTTP - nic innego. To jest samo w sobie ograniczenie, nie można użyć np. netTcp dla scenariuszy intranetowych.

2) Hosting w IIS7/WAS (Vista, Server 2008): daje to więcej opcji w zakresie obsługiwanych protokołów, a środowisko hostingowe na początku wygląda jak zwycięzca.

3) Samoaprowadzanie: w tym scenariuszu od Ciebie zależy, co należy zrobić, aby hostować i uruchamiać usługi.

Jeśli na razie wyrzucisz opcję # 1 (jeśli masz dostęp tylko do IIS6, zawsze korzystam z samoobsługi), to zależy od IIS7 kontra samo-hostingu.

IIS7 zapewnia "aktywację na żądanie", np. Twój kod serwisowy nie jest w pamięci przez cały czas, ale zostanie załadowany i utworzony w momencie zgłoszenia żądania. To może być plus.

Z drugiej strony hosting w usługach IIS7/WAS pozbawia użytkownika możliwości określania własnych punktów końcowych - punkt końcowy, a tym samym adres usługi, to katalog wirtualny, w którym znajduje się plik "MyService.svc" - okres. Nie możesz tego zmienić w żaden sposób, kształcie ani formie.

Samo-hosting może wyglądać na dużo pracy - ale daje najlepszą elastyczność: możesz wybrać protokoły, jak chcesz, możesz ustawić własny schemat adresowania, tak jak lubisz, i masz całkowita kontrola nad tym, co zostanie zrobione, kiedy. Możesz wprowadzić własny niestandardowy ServiceHost, jeśli potrzebujesz dodatkowej pracy dla usług hosta i tak dalej.

Chyba że po prostu bawisz się z WCF, zawsze polecałbym i głosowałbym na samo-hostowanie - jeśli potrzebujesz usługi WCF przez cały czas, wewnątrz usługi Windows NT (to najlepsze rozwiązanie w środowiskach produkcyjnych), a jeśli tworzysz/debugujesz, możesz całkowicie obsługiwać swoje usługi WCF w aplikacji konsolowej, którą możesz uruchomić i zatrzymać w wolnym czasie.

Krótko mówiąc: jeśli naprawdę chcesz kontrolować to, co się dzieje, zawsze polecam samodzielny hosting.

Ten może zostać zmieniony po dodaniu nowego "Dublina" Add-on-serwer Microsoftu - jakiś czas po uruchomieniu .NET 4, prawdopodobnie na początku 2010 roku - ale jest jeszcze za wcześnie, by o tym mówić.

Mam nadzieję, że to pomoże.

Marc

+3

Naprawdę znasz swoje WCF. – Contango

+0

@Gravitas: dzięki! Nauczyłem się od Mistrza WCF :-) (Juval Lowy) –

+0

Witam, prawie 5 lat później, czy mógłbyś zaktualizować swoją odpowiedź za pomocą najnowszej wersji WCF i IIS? Czy sądzisz, że funkcje Windows Services Recycling są równie wydajne, co usługi IIS? Dzięki! – Nock

3

Powiedziałbym, że bez IIS7 i WAS nie można hostować niczego poza punktami końcowymi opartymi na HTTP za pomocą IIS. Jako taki, najprawdopodobniej chciałbyś samemu hostować elastyczność.

chodzi o względy swoich danych, każda usługa może być kodowana z takiego stanu, że dane są buforowane itp

wiele żądań będzie wymagać korzystania WCF współbieżności. Aby ustawić atrybuty na hoście usługi:

[System.ServiceModel.ServiceBehavior(UseSynchronizationContext = false, 
    InstanceContextMode = System.ServiceModel.InstanceContextMode.PerCall, 
    ConcurrencyMode = System.ServiceModel.ConcurrencyMode.Multiple)] 
public class MyService : IMyService 
{ 
} 

WCF jest wielka bestia, polecam rzucić okiem na książki i coś jeszcze można dostać się w ręce Juval Lowy użytkownika, nie nauczą go w dzień.

1

Może trochę nie na temat, ale dotyczy czwartej.

Jeśli kończy się samoobsługa i musisz być "konfigurowalny, jak to możliwe w odniesieniu do punktów końcowych", możesz rzucić okiem na Managed Services Engine. MSE to produkt typu open source stworzony przez Microsoft Services, który umożliwia wirtualizację Twoich usług. Zasadniczo jest to host WCF, który używa metadanych z własnego repozytorium do ujawniania usług. Niektóre funkcje to: obsługa równoległej wersji usług, możliwość włączania/wyłączania operacji na usługach, zdolność mapowania operacji do punktów końcowych, możliwość stosowania polityk do operacji.

Nie jestem pewien, czy pasuje on do twoich potrzeb, ale warto się przyjrzeć - szczególnie, jeśli musisz być wyjątkowo konfigurowalny.

+0

MSE jest trochę stary, prawda? –

+0

Tak i nie. Najnowsza wersja miała miejsce w maju 2009, więc jest aktywnie rozwijana. Ale tam, gdzie pasuje do mapy drogowej SOA, nie jestem pewien (prawdopodobnie nigdzie, odkąd został opracowany przez Microsoft Services). –

+0

Minęło około 2 lat od wydania, więc powiem teraz, że jest trochę stary. :) –

Powiązane problemy