Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podczas tworzenia aplikacji często chcesz odroczyć decyzje administratora po wdrożeniu aplikacji. Na przykład często nie ma możliwości wcześniejszego poznania adresu usługi lub identyfikatora URI (Uniform Resource Identifier). Zamiast trwale kodować adres, lepiej jest zezwolić administratorowi na to po utworzeniu usługi. Ta elastyczność jest osiągana przez konfigurację.
Uwaga / Notatka
Użyj Narzędzia ServiceModel Metadata Utility (Svcutil.exe) z przełącznikiem /config, aby szybko utworzyć pliki konfiguracji.
Główne sekcje
Schemat konfiguracji programu Windows Communication Foundation (WCF) obejmuje następujące trzy główne sekcje (serviceModel, bindingsi services):
<configuration>
<system.serviceModel>
<bindings>
</bindings>
<services>
</services>
<behaviors>
</behaviors>
</system.serviceModel>
</configuration>
Elementy modelu ServiceModel
Sekcję powiązaną z elementem system.ServiceModel można użyć do skonfigurowania typu usługi z co najmniej jednym punktem końcowym, a także ustawieniami usługi. Każdy punkt końcowy można następnie skonfigurować przy użyciu adresu, kontraktu i powiązania. Aby uzyskać więcej informacji na temat punktów końcowych, zobacz Omówienie tworzenia punktu końcowego. Jeśli nie określono żadnych punktów końcowych, środowisko uruchomieniowe dodaje domyślne punkty końcowe. Aby uzyskać więcej informacji na temat domyślnych punktów końcowych, powiązań i zachowań, zobacz Uproszczone konfigurowanie i uproszczona konfiguracja usług WCF.
Wiązanie określa transporty (HTTP, TCP, rury, kolejkowanie komunikatów) i protokoły (zabezpieczenia, niezawodność, przepływy transakcji) oraz składa się z elementów wiązania, z których każdy określa aspekt komunikacji punktu końcowego ze światem.
Na przykład określenie podstawowego< elementuHttpBinding> oznacza użycie protokołu HTTP jako transportu dla punktu końcowego. Jest to używane do podłącznia punktu końcowego w czasie wykonywania, gdy usługa korzystająca z tego punktu końcowego jest otwarta.
Istnieją dwa rodzaje powiązań: z góry zdefiniowane i niestandardowe. Wstępnie zdefiniowane powiązania zawierają przydatne kombinacje elementów, które są używane w typowych scenariuszach. Aby uzyskać listę wstępnie zdefiniowanych typów powiązań dostępnych w programie WCF, zobacz System-Provided Powiązania. Jeśli żadna wstępnie zdefiniowana kolekcja powiązań nie ma poprawnej kombinacji funkcji, których potrzebuje aplikacja usługi, możesz utworzyć powiązania niestandardowe spełniające wymagania aplikacji. Aby uzyskać więcej informacji na temat powiązań niestandardowych, zobacz <customBinding>.
W poniższych czterech przykładach przedstawiono najbardziej typowe konfiguracje powiązań używane do konfigurowania usługi WCF.
Określenie punktu końcowego w celu zastosowania typu powiązania
Pierwszy przykład ilustruje sposób określania punktu końcowego skonfigurowanego przy użyciu adresu, kontraktu i powiązania.
<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<!-- This section is optional with the default configuration introduced
in .NET Framework 4. -->
<endpoint
address="/HelloWorld2/"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding" />
</service>
W tym przykładzie name atrybut wskazuje typ usługi, dla którego jest włączona konfiguracja. Podczas tworzenia usługi w kodzie wraz z kontraktem HelloWorld, jest ona inicjalizowana wszystkimi punktami końcowymi zdefiniowanymi w przykładowej konfiguracji. Jeśli zestaw implementuje tylko jeden kontrakt usługi, atrybut można pominąć, name ponieważ usługa używa jedynego dostępnego typu. Atrybut przyjmuje ciąg, który musi być w formacie Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Atrybut address określa identyfikator URI używany przez inne punkty końcowe do komunikowania się z usługą. Identyfikator URI może być ścieżką bezwzględną lub względną. Jeśli podany jest adres względny, host powinien podać adres podstawowy, który jest odpowiedni dla schematu transportu używanego w powiązaniu. Jeśli adres nie jest skonfigurowany, przyjmuje się, że adres podstawowy jest adresem tego punktu końcowego.
Atrybut contract określa kontrakt, który ujawnia ten punkt końcowy. Typ implementacji usługi musi implementować typ kontraktu. Jeśli implementacja usługi implementuje pojedynczy typ kontraktu, tę właściwość można pominąć.
Atrybut binding wybiera wstępnie zdefiniowane lub niestandardowe powiązanie, które ma być używane dla tego konkretnego punktu końcowego. Punkt końcowy, który nie wybiera jawnie powiązania, używa domyślnego wyboru powiązania, czyli BasicHttpBinding.
Modyfikowanie wstępnie zdefiniowanego powiązania
W poniższym przykładzie zmodyfikowano wstępnie zdefiniowane powiązanie. Następnie można go użyć do skonfigurowania dowolnego punktu końcowego w usłudze. Powiązanie jest modyfikowane przez ustawienie ReceiveTimeout wartości na 1 sekundę. Należy pamiętać, że właściwość zwraca TimeSpan obiekt.
To zmienione powiązanie można znaleźć w sekcji powiązań. To zmienione powiązanie można teraz użyć podczas tworzenia dowolnego punktu końcowego, ustawiając binding atrybut w elemecie endpoint .
Uwaga / Notatka
Jeśli nadasz określoną nazwę powiązaniu, bindingConfiguration określony w punkcie końcowym usługi musi być zgodny z nim.
<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="/HelloWorld2/"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding" />
</service>
<bindings>
<basicHttpBinding
receiveTimeout="00:00:01"
/>
</bindings>
Konfigurowanie zachowania do zastosowania w usłudze
W poniższym przykładzie dla typu usługi skonfigurowano określone zachowanie. Element ServiceMetadataBehavior służy do włączania narzędzia ServiceModel Metadata Tool (Svcutil.exe) w celu wykonywania zapytań dotyczących usługi i generowania dokumentów języka WSDL (Web Services Description Language) z metadanych.
Uwaga / Notatka
Jeśli nadasz określoną nazwę zachowaniu, behaviorConfiguration określony w sekcji usługi lub punktu końcowego musi być zgodny.
<behaviors>
<behavior>
<ServiceMetadata httpGetEnabled="true" />
</behavior>
</behaviors>
<services>
<service
name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding" />
</service>
</services>
Poprzednia konfiguracja umożliwia klientowi wywoływanie i pobieranie metadanych usługi typu "HelloWorld".
svcutil /config:Client.exe.config http://computer:8080/Hello?wsdl
Określanie usługi z dwoma punktami końcowymi przy użyciu różnych wartości powiązań
W tym ostatnim przykładzie skonfigurowano dwa punkty końcowe dla HelloWorld typu usługi. Każdy punkt końcowy używa różnego dostosowanego bindingConfiguration atrybutu tego samego typu wiązania (każdy modyfikuje basicHttpBinding element).
<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="http://computer:8080/Hello1"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="shortTimeout" />
<endpoint
address="http://computer:8080/Hello2"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="Secure" />
</service>
<bindings>
<basicHttpBinding
name="shortTimeout"
timeout="00:00:00:01"
/>
<basicHttpBinding
name="Secure">
<Security mode="Transport" />
</basicHttpBinding>
</bindings>
To samo zachowanie można uzyskać przy użyciu konfiguracji domyślnej, dodając sekcję protocolMapping i konfigurując powiązania, jak pokazano w poniższym przykładzie.
<protocolMapping>
<add scheme="http" binding="basicHttpBinding" bindingConfiguration="shortTimeout" />
<add scheme="https" binding="basicHttpBinding" bindingConfiguration="Secure" />
</protocolMapping>
<bindings>
<basicHttpBinding
name="shortTimeout"
timeout="00:00:00:01"
/>
<basicHttpBinding
name="Secure" />
<Security mode="Transport" />
</bindings>