Sdílet prostřednictvím


Používání standardních koncových bodů

Ukázka StandardEndpoints ukazuje, jak používat standardní koncové body v konfiguračních souborech služby. Standardní koncový bod umožňuje uživateli zjednodušit definice koncových bodů pomocí jedné vlastnosti k popisu adresy, vazby a kontraktu s dalšími vlastnostmi přidruženými k němu. Tato ukázka ukazuje, jak definovat a implementovat vlastní standardní koncový bod a jak definovat konkrétní vlastnosti v koncovém bodu.

Ukázkové podrobnosti

Koncové body služby je možné zadat zadáním tří parametrů: adresa, vazba a kontrakt. Mezi další parametry, které lze zadat, patří konfigurace chování, hlavičky, identifikátor URI naslouchání atd. V některých případech mají všechny adresy, vazby a kontrakty hodnoty, které se nedají změnit. Z tohoto důvodu je možné používat standardní koncové body. Mezi příklady takových koncových bodů patří koncové body výměny metadat a koncové body zjišťování. Standardní koncové body také zlepšují použitelnost tím, že umožňují konfiguraci koncových bodů služby bez nutnosti poskytovat informace o pevné povaze nebo vytvářet vlastní standardní koncové body, například zlepšit použitelnost poskytnutím přiměřené sady výchozích hodnot a tím snížením podrobností konfiguračních souborů.

Tato ukázka se skládá ze dvou projektů: služby, která definuje dva standardní koncové body a klient, který komunikuje se službou. Způsob, jakým jsou standardní koncové body definované pro službu v konfiguračním souboru, se zobrazí v následujícím příkladu.

<?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>

První koncový bod definovaný pro službu je druh customEndpoint, jehož definici lze vidět v <standardEndpoints> části, ve které je vlastnost property udělena hodnotu true. Jedná se o případ koncového bodu přizpůsobeného pomocí nové vlastnosti. Druhý koncový bod odpovídá koncovému bodu metadat, ve kterém jsou pevné hodnoty pro adresu, vazbu a kontrakt.

Chcete-li definovat standardní prvek koncového bodu, musí být vytvořena třída, která je odvozena z StandardEndpointElement . V případě této ukázky CustomEndpointElement byla třída definována, jak je znázorněno v následujícím příkladu.

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 Ve funkci CustomEndpoint se vytvoří objekt. Její definice je znázorněna v následujícím příkladu:

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 bylo možné provádět komunikaci mezi službou a klientem, vytvoří se v klientovi odkaz na službu. Po sestavení a spuštění ukázky se služba spustí a klient s ní komunikuje. Mějte na paměti, že odkaz na službu by se měl aktualizovat při každé změně služby.

Použití této ukázky

  1. V sadě Visual Studio otevřete soubor StandardEndpoints.sln.

  2. Povolte spuštění více projektů.

    1. V Průzkumník řešení klikněte pravým tlačítkem na řešení Standardní koncové body a pak vyberte Vlastnosti.

    2. V okně Společné vlastnosti vyberte spouštěný projekt a klepněte na tlačítko Více projektů po spuštění.

    3. Přesuňte projekt služby na začátek seznamu s akcí nastavenou na Spustit.

    4. Přesuňte projekt klienta za projekt služby, také s akcí nastavenou na Spustit.

      Určuje, že se projekt klienta spustí po projektu služby.

  3. Řešení spustíte stisknutím klávesy F5.

Poznámka:

Pokud tyto kroky nefungují, pomocí následujícího postupu se ujistěte, že je vaše prostředí správně nastavené:

  1. Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.
  2. Pokud chcete sestavit řešení, postupujte podle pokynů v části Sestavení ukázek Windows Communication Foundation.
  3. Pokud chcete spustit ukázku v jedné nebo více konfiguracích počítače, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.