Uproszczona konfiguracja
Konfigurowanie usług Windows Communication Foundation (WCF) może być złożonym zadaniem. Istnieje wiele różnych opcji i nie zawsze łatwo jest określić, jakie ustawienia są wymagane. Chociaż pliki konfiguracji zwiększają elastyczność usług WCF, są one również źródłem dla wielu trudnych do znalezienia problemów. Program .NET Framework 4.6.1 rozwiązuje te problemy i umożliwia zmniejszenie rozmiaru i złożoności konfiguracji usługi.
Uproszczona konfiguracja
W plikach <system.serviceModel>
konfiguracji usługi WCF sekcja zawiera <service>
element dla każdej hostowanej usługi. Element <service>
zawiera kolekcję <endpoint>
elementów, które określają punkty końcowe uwidocznione dla każdej usługi i opcjonalnie zestaw zachowań usługi. <endpoint>
Elementy określają adres, powiązanie i kontrakt uwidoczniony przez punkt końcowy oraz opcjonalnie powiązania konfiguracji i zachowania punktu końcowego. Sekcja <system.serviceModel>
zawiera <behaviors>
również element, który umożliwia określenie zachowania usługi lub punktu końcowego. Poniższy przykład przedstawia sekcję <system.serviceModel>
pliku konfiguracji.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name=MyBindingConfig"
maxBufferSize="100"
maxReceiveBufferSize="100" />
</basicHttpBinding>
</bindings> <services>
<service behaviorConfiguration="MyServiceBehavior"
name="MyService">
<endpoint address=""
binding="basicHttpBinding"
contract="ICalculator"
bindingConfiguration="MyBindingConfig" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
Program .NET Framework 4.6.1 ułatwia konfigurowanie usługi WCF przez usunięcie wymagania dla <service>
elementu. Jeśli nie dodasz <service>
sekcji ani nie dodasz żadnych punktów końcowych w <service>
sekcji, a usługa nie zdefiniuje programowo żadnych punktów końcowych, zestaw domyślnych punktów końcowych zostanie automatycznie dodany do usługi, jeden dla każdego adresu podstawowego usługi i dla każdego kontraktu zaimplementowanego przez usługę. W każdym z tych punktów końcowych adres punktu końcowego odpowiada adresowi podstawowemu, powiązanie jest określane przez schemat adresów podstawowych, a kontrakt jest implementowany przez usługę. Jeśli nie musisz określać żadnych punktów końcowych ani zachowań usługi ani wprowadzać żadnych zmian ustawień powiązania, nie musisz w ogóle określać pliku konfiguracji usługi. Jeśli usługa implementuje dwa kontrakty, a host włącza zarówno protokół HTTP, jak i TCP, host usługi tworzy cztery domyślne punkty końcowe, po jednym dla każdego kontraktu przy użyciu każdego transportu. Aby utworzyć domyślne punkty końcowe, host usługi musi wiedzieć, jakie powiązania mają być używane. Te ustawienia są określone w <protocolMappings>
sekcji w sekcji .<system.serviceModel>
Sekcja <protocolMappings>
zawiera listę schematów protokołów transportu mapowanych na typy powiązań. Host usługi używa przekazanych do niego adresów podstawowych, aby określić, które powiązanie ma być używane. W poniższym przykładzie użyto <protocolMappings>
elementu .
Ostrzeżenie
Zmiana domyślnych elementów konfiguracji, takich jak powiązania lub zachowania, może mieć wpływ na usługi zdefiniowane na niższych poziomach hierarchii konfiguracji, ponieważ mogą używać tych domyślnych powiązań i zachowań. W związku z tym każdy, kto zmienia domyślne powiązania i zachowania, musi mieć świadomość, że te zmiany mogą mieć wpływ na inne usługi w hierarchii.
Uwaga
Usługi hostowane w usługach Internet Information Services (IIS) lub Windows Process Activation Service (WAS) używają katalogu wirtualnego jako adresu podstawowego.
<protocolMapping>
<add scheme="http" binding="basicHttpBinding" bindingConfiguration="MyBindingConfig"/>
<add scheme="net.tcp" binding="netTcpBinding"/>
<add scheme="net.pipe" binding="netNamedPipeBinding"/>
<add scheme="net.msmq" binding="netMSMQBinding"/>
</protocolMapping>
W poprzednim przykładzie punkt końcowy z adresem podstawowym rozpoczynającym się od schematu "http" używa elementu BasicHttpBinding. Punkt końcowy z adresem podstawowym rozpoczynającym się od schematu "net.tcp" używa elementu NetTcpBinding. Ustawienia można zastąpić w lokalnym pliku App.config lub Web.config.
Każdy element w <protocolMappings>
sekcji musi określać schemat i powiązanie. Opcjonalnie można określić atrybut określający konfigurację bindingConfiguration
powiązania w <bindings>
sekcji pliku konfiguracji. Jeśli nie bindingConfiguration
zostanie określony, zostanie użyta konfiguracja powiązania anonimowego odpowiedniego typu powiązania.
Zachowania usługi są konfigurowane dla domyślnych punktów końcowych przy użyciu <behavior>
anonimowych sekcji w <serviceBehaviors>
sekcjach. Wszystkie nienazwane <behavior>
elementy w ramach programu <serviceBehaviors>
są używane do konfigurowania zachowań usługi. Na przykład następujący plik konfiguracji umożliwia publikowanie metadanych usługi dla wszystkich usług w ramach hosta.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
</behavior>
</serviceBehaviors>
</behaviors> <!-- No <service> tag is necessary. Default endpoints are added to the service -->
<!-- The service behavior with name="" is picked up by the service -->
</system.serviceModel>
Zachowania punktów końcowych są konfigurowane przy użyciu anonimowych <behavior>
sekcji w <serviceBehaviors>
sekcjach.
Poniższy przykład to plik konfiguracji odpowiadający temu, który na początku tego tematu używa uproszczonego modelu konfiguracji.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding maxBufferSize="100"
maxReceiveBufferSize="100" />
</basicHttpBinding>
</bindings>
<!-- No <service> tag is necessary. Default endpoints will be added to the service -->
<!-- The service behavior with name="" will be picked up by the service -->
<protocolMapping>
<add scheme="http" binding="basicHttpBinding" />
</protocolMapping>
</system.serviceModel>
Ważne
Ta funkcja jest powiązana tylko z konfiguracją usługi WCF, a nie z konfiguracją klienta. W większości przypadków konfiguracja klienta WCF zostanie wygenerowana przez narzędzie, takie jak svcutil.exe lub dodanie odwołania do usługi z programu Visual Studio. Jeśli ręcznie konfigurujesz klienta WCF, musisz dodać <element klienta> do konfiguracji i określić wszystkie punkty końcowe, które chcesz wywołać.