Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
В примере ServiceDescription показано, как служба может получить сведения о описании службы во время выполнения. Пример основан на руководстве по началу работы с дополнительной операцией службы, которая определена для возврата описательных сведений о службе. Возвращаемые сведения содержат базовые адреса и конечные точки для службы. Эта служба предоставляет эти сведения с помощью классов OperationContext, ServiceHost и ServiceDescription.
В этом примере клиентом является консольное приложение (.exe), а служба хостится с помощью Internet Information Services (IIS).
Замечание
Процедура установки и инструкции по сборке для этого примера находятся в конце этого раздела.
Этот пример содержит измененную версию контракта калькулятора под названием IServiceDescriptionCalculator. Контракт определяет дополнительную операцию службы с именем GetServiceDescriptionInfo , которая возвращает многострочный объект клиенту, описывающий базовый адрес или адреса, а также конечную точку службы или конечные точки для службы.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface IServiceDescriptionCalculator
{
[OperationContract]
int Add(int n1, int n2);
[OperationContract]
int Subtract(int n1, int n2);
[OperationContract]
int Multiply(int n1, int n2);
[OperationContract]
int Divide(int n1, int n2);
[OperationContract]
string GetServiceDescriptionInfo();
}
Код реализации для GetServiceDescriptionInfo использует ServiceDescription для перечисления конечных точек службы. Так как конечные точки службы могут иметь относительные адреса, сначала он перечисляет базовые адреса для службы. Чтобы получить все эти сведения, код получает контекст операции с помощью Current. Объект ServiceHost и связанный с ним объект ServiceDescription получаются из контекста операции. Чтобы получить список базовых конечных точек для службы, код выполняет итерацию по коллекции узла BaseAddresses службы. Чтобы получить список конечных точек службы для службы, код выполняет итерацию по коллекции конечных точек описания службы.
public string GetServiceDescriptionInfo()
{
string info = "";
OperationContext operationContext = OperationContext.Current;
ServiceHost host = (ServiceHost)operationContext.Host;
ServiceDescription desc = host.Description;
// Enumerate the base addresses in the service host.
info += "Base addresses:\n";
foreach (Uri uri in host.BaseAddresses)
{
info += " " + uri + "\n";
}
// Enumerate the service endpoints in the service description.
info += "Service endpoints:\n";
foreach (ServiceEndpoint endpoint in desc.Endpoints)
{
info += " Address: " + endpoint.Address + "\n";
info += " Binding: " + endpoint.Binding.Name + "\n";
info += " Contract: " + endpoint.Contract.Name + "\n";
}
return info;
}
При запуске примера отображаются операции калькулятора, а затем сведения о службе, возвращаемые операцией GetServiceDescriptionInfo . Нажмите клавишу ВВОД в окне клиента, чтобы завершить работу клиента.
Add(15,3) = 18
Subtract(145,76) = 69
Multiply(9,81) = 729
Divide(22,7) = 3
GetServiceDescriptionInfo
Base addresses:
http://<machine-name>/ServiceModelSamples/service.svc
https://<machine-name>/ServiceModelSamples/service.svc
Service endpoints:
Address: http://<machine-name>/ServiceModelSamples/service.svc
Binding: WSHttpBinding
Contract: IServiceDescriptionCalculator
Address: http://<machine-name>/ServiceModelSamples/service.svc/mex
Binding: MetadataExchangeHttpBinding
Contract: IMetadataExchange
Press <ENTER> to terminate client.
Настройка, сборка и запуск примера
Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.
Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .
Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в запуска примеров Windows Communication Foundation.