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
V sadě Visual Studio otevřete soubor StandardEndpoints.sln.
Povolte spuštění více projektů.
V Průzkumník řešení klikněte pravým tlačítkem na řešení Standardní koncové body a pak vyberte Vlastnosti.
V okně Společné vlastnosti vyberte spouštěný projekt a klepněte na tlačítko Více projektů po spuštění.
Přesuňte projekt služby na začátek seznamu s akcí nastavenou na Spustit.
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.
Ř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é:
- Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.
- Pokud chcete sestavit řešení, postupujte podle pokynů v části Sestavení ukázek Windows Communication Foundation.
- 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.