Wdrażanie usługi WCF hostowanej przez Internetowe usługi informacyjne
Tworzenie i wdrażanie usługi Windows Communication Foundation (WCF) hostowanej w usługach Internet Information Services (IIS) składa się z następujących zadań:
Upewnij się, że usługi IIS, ASP.NET, WCF i składnik aktywacji programu WCF są poprawnie zainstalowane i zarejestrowane.
Utwórz nową aplikację usług IIS lub ponownie użyj istniejącej aplikacji ASP.NET.
Utwórz plik svc dla usługi WCF.
Wdróż implementację usługi w aplikacji IIS.
Skonfiguruj usługę WCF.
Aby uzyskać szczegółowy przewodnik tworzenia usługi WCF hostowanej przez usługi IIS, zobacz Instrukcje: hostowanie usługi WCF w usługach IIS.
Upewnij się, że usługi IIS, ASP.NET i WCF są poprawnie zainstalowane i zarejestrowane
Aby usługi WCF, IIS i ASP.NET działały poprawnie, należy zainstalować usługi WCF hostowane przez usługi IIS. Procedury instalowania programu WCF (w ramach programu .NET Framework), ASP.NET i iis różnią się w zależności od systemu operacyjnego. Aby uzyskać więcej informacji na temat instalowania programu WCF i programu .NET Framework, zobacz Instalowanie programu .NET Framework dla deweloperów. Aby zainstalować usługi IIS w systemie Windows 10, otwórz pozycję Programy i funkcje w Panel sterowania, a następnie wybierz pozycję Włącz lub wyłącz funkcje systemu Windows. W obszarze Funkcje systemu Windows wybierz pozycję Internetowe usługi informacyjne, a następnie wybierz przycisk OK.
Instrukcje dotyczące instalowania usług IIS w innych systemach operacyjnych można znaleźć w temacie Instalowanie usług IIS w systemach Windows Vista i Windows 7 oraz Instalowanie usług IIS 8.5 w systemie Windows Server 2012 R2.
Proces instalacji programu .NET Framework automatycznie rejestruje program WCF z usługami IIS, jeśli usługi IIS są już obecne na komputerze. Jeśli usługi IIS są zainstalowane po programie .NET Framework, do zarejestrowania programu WCF w usługach IIS i ASP.NET jest wymagany dodatkowy krok. Można to zrobić w następujący sposób, w zależności od systemu operacyjnego:
Windows 7 i Windows Server 2003: użyj narzędzia rejestracji Modelu usług (ServiceModelReg.exe), aby zarejestrować program WCF w usługach IIS. Aby użyć tego narzędzia, wprowadź polecenie
ServiceModelReg.exe /i /x
w wierszu polecenia dla deweloperów programu Visual Studio lub w programie Visual Studio Developer PowerShell.Windows 7: Na koniec należy sprawdzić, czy ASP.NET jest skonfigurowany do używania programu .NET Framework w wersji 4 lub nowszej. W tym celu uruchom narzędzie ASPNET_Regiis z opcją
–i
. Aby uzyskać więcej informacji, zobacz ASP.NET narzędzie rejestracji usług IIS.
Tworzenie nowej aplikacji usług IIS lub ponowne używanie istniejącej aplikacji ASP.NET
Usługi WCF hostowane przez usługi IIS muszą znajdować się wewnątrz aplikacji usług IIS. Możesz utworzyć nową aplikację usług IIS do hostowania wyłącznie usług WCF. Alternatywnie możesz wdrożyć usługę WCF w istniejącej aplikacji, która już hostuje zawartość ASP.NET 2.0 (na przykład strony .aspx i usługi sieci Web ASP.NET [ASMX]). Aby uzyskać więcej informacji na temat tych opcji, zobacz sekcje "Hosting WCF Side-by-side with ASP.NET" (Hostowanie usług WCF w trybie zgodności ASP.NET) w usługach WCF i ASP.NET.
Należy pamiętać, że usługi IIS 6.0 i nowsze okresowo ponownie uruchamiają izolowane aplikacje programistyczne zorientowane na obiekty. Wartość domyślna to 1740 minut. Obsługiwana maksymalna wartość to 71 582 minuty. To ponowne uruchomienie można wyłączyć. Aby uzyskać więcej informacji na temat tej właściwości, zobacz PeriodicRestartTime.
Tworzenie pliku svc dla usługi WCF
Usługi WCF hostowane w usługach IIS są reprezentowane jako pliki zawartości specjalnej (pliki svc) wewnątrz aplikacji usług IIS. Ten model jest podobny do sposobu, w jaki strony ASMX są reprezentowane w aplikacji usług IIS jako pliki asmx. Plik svc zawiera dyrektywę przetwarzania specyficzną dla programu WCF (@ServiceHost), która umożliwia infrastrukturze hostingu WCF aktywowanie hostowanych usług w odpowiedzi na komunikaty przychodzące. Najczęstszą składnią pliku svc jest następująca instrukcja.
<% @ServiceHost Service="MyNamespace.MyServiceImplementationTypeName" %>
Składa się z dyrektywy @ServiceHost i pojedynczego atrybutu Service
. Wartość atrybutu Service
to nazwa typu środowiska uruchomieniowego języka wspólnego (CLR) implementacji usługi. Użycie tej dyrektywy jest zasadniczo równoważne tworzeniu hosta usługi przy użyciu następującego kodu.
new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );
Można również wykonać dodatkową konfigurację hostingu, taką jak utworzenie listy adresów podstawowych dla usługi. Można również użyć niestandardowej ServiceHostFactory , aby rozszerzyć dyrektywę do użycia z niestandardowymi rozwiązaniami hostingu. Aplikacje usług IIS, które hostują usługi WCF, nie są odpowiedzialne za zarządzanie tworzeniem i okresem ServiceHost istnienia wystąpień. Zarządzana infrastruktura hostingu WCF tworzy niezbędne ServiceHost wystąpienie dynamicznie po odebraniu pierwszego żądania dla pliku svc. Wystąpienie nie jest zwalniane, dopóki nie zostanie zamknięte jawnie za pomocą kodu lub gdy aplikacja zostanie odzyskana.
Aby uzyskać więcej informacji na temat składni plików svc, zobacz @ServiceHost.
Wdrażanie implementacji usługi w aplikacji usług IIS
Usługi WCF hostowane w usługach IIS używają tego samego dynamicznego modelu kompilacji co ASP.NET 2.0. Podobnie jak w przypadku ASP.NET, można wdrożyć kod implementacji dla usług WCF hostowanych przez usługi IIS na kilka sposobów w różnych lokalizacjach w następujący sposób:
Jako wstępnie skompilowany plik .dll znajdujący się w globalnej pamięci podręcznej zestawów (GAC) lub w katalogu \bin aplikacji. Wstępnie skompilowane pliki binarne nie są aktualizowane, dopóki nie zostanie wdrożona nowa wersja biblioteki klas.
Jako niekompilowane pliki źródłowe znajdujące się w katalogu \App_Code aplikacji. Pliki źródłowe znajdujące się w tym katalogu są dynamicznie wymagane podczas przetwarzania pierwszego żądania aplikacji. Wszelkie zmiany w plikach w katalogu \App_Code powodują ponowne przetworzenie całej aplikacji i ponowne skompilowane po odebraniu następnego żądania.
Jako niekompilowany kod umieszczony bezpośrednio w pliku svc. Kod implementacji można również znaleźć w tekście w pliku .svc usługi po dyrektywie @ServiceHost. Wszelkie zmiany w kodzie wbudowanym powodują, że aplikacja zostanie odzyskana i ponownie skompilowana po odebraniu następnego żądania.
Aby uzyskać więcej informacji na temat modelu kompilacji ASP.NET 2.0, zobacz omówienie kompilacji ASP.NET.
Konfigurowanie usługi WCF
Usługi WCF hostowane przez usługi IIS przechowują konfigurację w pliku Web.config aplikacji. Usługi hostowane przez usługi IIS używają tych samych elementów konfiguracji i składni co usługi WCF hostowane poza usługami IIS. Jednak następujące ograniczenia są unikatowe dla środowiska hostingu usług IIS:
Adresy podstawowe dla usług hostowanych przez usługi IIS.
Aplikacje hostające usługi WCF spoza usług IIS mogą kontrolować podstawowy adres hostów usług, przekazując zestaw identyfikatorów URI adresów podstawowych do ServiceHost konstruktora lub dostarczając <element hosta> w konfiguracji usługi. Usługi hostowane w usługach IIS nie mają możliwości kontrolowania ich adresu podstawowego; podstawowym adresem usługi hostowanej przez usługi IIS jest adres jego pliku .svc.
Adresy punktów końcowych dla usług hostowanych przez usługi IIS
W przypadku hostowania w usługach IIS adresy punktów końcowych są zawsze uważane za względne względem adresu pliku svc reprezentującego usługę. Jeśli na przykład podstawowy adres usługi WCF ma http://localhost/Application1/MyService.svc
następującą konfigurację punktu końcowego:
<endpoint address="anotherEndpoint" />
Zapewnia to punkt końcowy, który można uzyskać pod adresem http://localhost/Application1/MyService.svc/anotherEndpoint
.
Podobnie element konfiguracji punktu końcowego, który używa pustego ciągu, ponieważ adres względny zapewnia punkt końcowy osiągalny pod http://localhost/Application1/MyService.svc
adresem , który jest adresem podstawowym.
<endpoint address="" />
Należy zawsze używać względnych adresów punktów końcowych dla punktów końcowych usługi hostowanej przez usługi IIS. Podanie w pełni kwalifikowanego adresu punktu końcowego (na przykład ) może prowadzić do błędów we wdrożeniu usługi, http://localhost/MyService.svc
jeśli adres punktu końcowego nie wskazuje aplikacji IIS, która hostuje usługę uwidaczniającą punkt końcowy. Używanie względnych adresów punktów końcowych dla hostowanych usług pozwala uniknąć tych potencjalnych konfliktów.
Dostępne transporty
Usługi WCF hostowane w usługach IIS 5.1 i IIS 6.0 są ograniczone do korzystania z komunikacji opartej na protokole HTTP. Na tych platformach usług IIS skonfigurowanie usługi hostowanej do używania powiązania innego niż HTTP powoduje błąd podczas aktywacji usługi. W przypadku usług IIS 7.0 obsługiwane transporty obejmują protokoły HTTP, Net.TCP, Net.Pipe, Net.MSMQ i msmq.formatname w celu zapewnienia zgodności z poprzednimi wersjami z istniejącymi aplikacjami MSMQ.
Zabezpieczenia transportu HTTP
Usługi WCF hostowane przez usługi IIS mogą korzystać z zabezpieczeń transportu HTTP (na przykład schematów uwierzytelniania HTTPS i HTTP, takich jak podstawowe, szyfrowane i zintegrowane uwierzytelnianie systemu Windows), o ile katalog wirtualny usług IIS zawierający usługę obsługuje te ustawienia. Ustawienia zabezpieczeń transportu HTTP w powiązaniu hostowanego punktu końcowego muszą być zgodne z ustawieniami zabezpieczeń transportu w katalogu wirtualnym usług IIS, który go zawiera.
Na przykład punkt końcowy programu WCF skonfigurowany do korzystania z uwierzytelniania szyfrowego HTTP musi znajdować się w katalogu wirtualnym usług IIS, który jest również skonfigurowany do zezwalania na uwierzytelnianie szyfrowane HTTP. Niedopasowane kombinacje ustawień usług IIS i ustawień punktu końcowego programu WCF powodują błąd podczas aktywacji usługi.