Opis usługi
W przykładzie ServiceDescription pokazano, jak usługa może pobrać informacje o opisie usługi w czasie wykonywania. Przykład jest oparty na artykule Wprowadzenie z dodatkową operacją usługi zdefiniowaną w celu zwrócenia opisowych informacji o usłudze. Zwracane informacje zawierają listę podstawowych adresów i punktów końcowych dla usługi. Usługa udostępnia te informacje przy użyciu OperationContextklas , ServiceHosti ServiceDescription .
W tym przykładzie klient jest aplikacją konsolową (.exe), a usługa jest hostowana przez usługi Internet Information Services (IIS).
Uwaga
Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.
Ten przykład ma zmodyfikowaną wersję kontraktu kalkulatora o nazwie IServiceDescriptionCalculator
. Kontrakt definiuje dodatkową operację usługi o nazwie GetServiceDescriptionInfo
, która zwraca ciąg wielowierszowy do klienta, który opisuje podstawowy adres lub adresy oraz punkt końcowy usługi lub punkty końcowe usługi dla usługi.
[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();
}
Kod implementacji używany do GetServiceDescriptionInfo
ServiceDescription wyświetlania listy punktów końcowych usługi. Ponieważ punkty końcowe usługi mogą mieć adresy względne, najpierw wyświetla listę adresów podstawowych dla usługi. Aby uzyskać wszystkie te informacje, kod uzyskuje kontekst operacji przy użyciu polecenia Current. Obiekt ServiceHost i jego ServiceDescription obiekt są pobierane z kontekstu operacji. Aby wyświetlić listę podstawowych punktów końcowych usługi, kod iteruje za pośrednictwem kolekcji hosta BaseAddresses usługi. Aby wyświetlić listę punktów końcowych usługi dla usługi, kod iteruje za pośrednictwem kolekcji punktów końcowych opisu usługi.
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;
}
Po uruchomieniu przykładu zobaczysz operacje kalkulatora, a następnie informacje o usłudze zwrócone przez operację GetServiceDescriptionInfo
. Naciśnij klawisz ENTER w oknie klienta, aby zamknąć klienta.
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.
Aby skonfigurować, skompilować i uruchomić przykład
Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.
Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, 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 konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.