Użycie standardowych punktów końcowych
W przykładzie StandardEndpoints pokazano, jak używać standardowych punktów końcowych w plikach konfiguracji usługi. Standardowy punkt końcowy umożliwia użytkownikowi uproszczenie definicji punktów końcowych przy użyciu jednej właściwości w celu opisania adresu, powiązania i kombinacji kontraktu z dodatkowymi skojarzonymi właściwościami. W tym przykładzie pokazano, jak zdefiniować i zaimplementować niestandardowy standardowy punkt końcowy oraz jak zdefiniować określone właściwości w punkcie końcowym.
Przykładowe szczegóły
Punkty końcowe usługi można określić, podając trzy parametry: adres, powiązanie i kontrakt. Inne parametry, które można podać, obejmują konfigurację zachowania, nagłówki, identyfikator URI nasłuchiwania itd. W niektórych przypadkach wszystkie adresy, powiązania i kontrakty mają wartości, których nie można zmienić. Z tego powodu można używać standardowych punktów końcowych. Niektóre przykłady takich punktów końcowych obejmują punkty końcowe wymiany metadanych i punkty końcowe odnajdywania. Standardowe punkty końcowe zwiększają również użyteczność, umożliwiając konfigurację punktów końcowych usługi bez konieczności podawania informacji o stałym charakterze lub tworzenia własnych standardowych punktów końcowych, na przykład w celu zwiększenia użyteczności przez dostarczenie rozsądnego zestawu wartości domyślnych, a tym samym zmniejszenie szczegółowości plików konfiguracji.
Ten przykład składa się z dwóch projektów: usługi, która definiuje dwa standardowe punkty końcowe i klienta komunikującego się z usługą. Sposób, w jaki standardowe punkty końcowe są definiowane dla usługi w pliku konfiguracji, jest pokazany w poniższym przykładzie.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<extensions>
<endpointExtensions>
<add name="customEndpoint" type="Microsoft.Samples.StandardEndpoints.CustomEndpointCollectionElement, service" />
</endpointExtensions>
</extensions>
<services>
<service name="Microsoft.Samples.StandardEndpoints.CalculatorService">
<endpoint address="http://localhost:8000/Samples/Service.svc/customEndpoint" contract="Microsoft.Samples.StandardEndpoints.ICalculator" kind="customEndpoint" />
<endpoint kind="mexEndpoint" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
</behavior>
</serviceBehaviors>
</behaviors>
<standardEndpoints>
<customEndpoint>
<standardEndpoint property="True" />
</customEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
Pierwszy punkt końcowy zdefiniowany dla usługi to rodzaj customEndpoint
, którego definicja jest widoczna w <standardEndpoints>
sekcji, w której właściwość property
ma wartość true
. Jest to przypadek punktu końcowego dostosowanego przy użyciu nowej właściwości. Drugi punkt końcowy odpowiada punktowi końcowemu metadanych, w którym są stałe wartości adresu, powiązania i kontraktu.
Aby zdefiniować standardowy element punktu końcowego, należy utworzyć klasę pochodzącą z StandardEndpointElement
klasy. W przypadku tego przykładu CustomEndpointElement
klasa została zdefiniowana, jak pokazano w poniższym przykładzie.
public class CustomEndpointElement : StandardEndpointElement
{
public bool Property
{
get { return (bool)base["property"]; }
set { base["property"] = value; }
}
protected override ConfigurationPropertyCollection Properties
{
get
{
ConfigurationPropertyCollection properties = base.Properties;
properties.Add(new ConfigurationProperty("property", typeof(bool), false, ConfigurationPropertyOptions.None));
return properties;
}
}
protected override Type EndpointType
{
get { return typeof(CustomEndpoint); }
}
protected override ServiceEndpoint CreateServiceEndpoint(ContractDescription contract)
{
return new CustomEndpoint();
}
protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
{
CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
customEndpoint.Property = this.Property;
}
protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ChannelEndpointElement channelEndpointElement)
{
CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
customEndpoint.Property = this.Property;
}
protected override void OnInitializeAndValidate(ServiceEndpointElement serviceEndpointElement)
{
}
protected override void OnInitializeAndValidate(ChannelEndpointElement channelEndpointElement)
{
}
}
CreateServiceEndpoint
W funkcji tworzony CustomEndpoint
jest obiekt. Jego definicja jest pokazana w poniższym przykładzie:
public class CustomEndpoint : ServiceEndpoint
{
public CustomEndpoint()
: this(string.Empty)
{
}
public CustomEndpoint(string address)
: this(address, ContractDescription.GetContract(typeof(ICalculator)))
{
}
public CustomEndpoint(string address, ContractDescription contract)
: base(contract)
{
this.Binding = new BasicHttpBinding();
this.IsSystemEndpoint = false;
}
public bool Property
{
get;
set;
}
}
Aby wykonać komunikację między usługą a klientem, w kliencie jest tworzone odwołanie do usługi. Gdy przykład zostanie skompilowany i wykonany, usługa zostanie wykonana, a klient komunikuje się z nim. Należy pamiętać, że odwołanie do usługi powinno być aktualizowane za każdym razem, gdy nastąpiła pewna zmiana w usłudze.
Aby użyć tego przykładu
Za pomocą programu Visual Studio otwórz plik StandardEndpoints.sln.
Włącz uruchamianie wielu projektów.
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy rozwiązanie Standardowe punkty końcowe, a następnie wybierz polecenie Właściwości.
W obszarze Wspólne właściwości wybierz pozycję Projekt startowy, a następnie kliknij pozycję Wiele projektów startowych.
Przenieś projekt Usługi na początek listy z ustawioną pozycją Akcja na start.
Przenieś projekt Klient po projekcie Usługi, a także z ustawieniem Akcja na Start.
Określa to, że projekt klienta jest wykonywany po projekcie Usługi.
Aby uruchomić rozwiązanie, naciśnij klawisz F5.
Uwaga
Jeśli te kroki nie działają, upewnij się, że środowisko zostało prawidłowo skonfigurowane, wykonując następujące czynności:
- Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.
- Aby skompilować rozwiązanie, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).
- Aby uruchomić przykład w jednej lub wielu konfiguracjach komputera, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.