Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере StandardEndpoints показано, как использовать стандартные конечные точки в файлах конфигурации службы. Стандартная конечная точка позволяет пользователю упростить определения конечных точек с помощью одного свойства для описания адреса, привязки и сочетания контракта с дополнительными свойствами, связанными с ним. В этом примере показано, как определить и реализовать пользовательскую стандартную конечную точку и как определить определенные свойства в конечной точке.
Детали образца
Конечные точки службы можно указать, указав три параметра: адрес, привязку и контракт. Другие параметры, которые можно предоставить, включают конфигурацию поведения, заголовки, URI прослушивания и т. д. В некоторых случаях любые или все адреса, привязки и контракты имеют значения, которые не могут измениться. По этой причине можно использовать стандартные конечные точки. К некоторым примерам таких конечных точек относятся конечные точки обмена метаданными и конечные точки обнаружения. Стандартные конечные точки также повышают удобство использования, позволяя настраивать конечные точки службы без необходимости предоставлять сведения о фиксированной природе или создавать собственные стандартные конечные точки, например для повышения удобства использования путем предоставления разумного набора значений по умолчанию и снижения детализации файлов конфигурации.
Этот пример состоит из двух проектов: служба, которая определяет две стандартные конечные точки и клиент, взаимодействующий со службой. Способ определения стандартных конечных точек для службы в файле конфигурации показан в следующем примере.
<?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>
Первая конечная точка, определенная для службы, имеет вид customEndpoint, определение которого можно увидеть в <standardEndpoints> разделе, в котором property свойству присваивается значение true. Это случай конечной точки, настроенной с помощью нового свойства. Вторая конечная точка соответствует конечной точке метаданных, в которой фиксируются значения адреса, привязки и контракта.
Чтобы определить стандартный элемент конечной точки, необходимо создать класс, производный от StandardEndpointElement. В этом примере CustomEndpointElement класс определен, как показано в следующем примере.
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 создается объект CustomEndpoint. Его определение показано в следующем примере:
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;
}
}
Для взаимодействия между службой и клиентом в клиенте создается ссылка на службу. Когда создается и выполняется образец, служба запускается, и клиент взаимодействует с ней. Обратите внимание, что ссылка на службу должна обновляться при каждом изменении службы.
Использование этого примера
С помощью Visual Studio откройте файл StandardEndpoints.sln.
Разрешите запуск нескольких проектов.
В обозревателе решений щелкните правой кнопкой мыши решение "Стандартные конечные точки", а затем выберите "Свойства".
В разделе "Общие свойства" выберите "Запуск проекта" и нажмите кнопку "Несколько запускаемых проектов".
Переместите проект службы в начало списка с параметром "Действие ", равным "Пуск".
Переместите клиентский проект после проекта службы, а также с набором действий для запуска.
Это указывает, что клиентский проект выполняется после проекта службы.
Чтобы запустить решение, нажмите клавишу F5.
Замечание
Если эти действия не работают, убедитесь, что ваша среда настроена правильно, выполнив следующие действия.
- Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.
- Чтобы создать решение, следуйте инструкциям по созданию примеров Windows Communication Foundation.
- Чтобы запустить пример в одной или нескольких конфигурациях компьютера, следуйте инструкциям в разделе "Примеры Windows Communication Foundation".