Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przykład ServiceDescription pokazuje, w jaki sposób usługa może pobierać informacje o opisie usługi w czasie działania. Przykład jest oparty na Wprowadzeniu, z dodatkową operacją usługi zdefiniowaną do 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 klas OperationContext, ServiceHost i ServiceDescription.
W tym przykładzie klient jest aplikacją konsolową (.exe), a usługa jest hostowana przez usługi Internet Information Services (IIS).
Uwaga / Notatka
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 klientowi ciąg wielowierszowy opisujący podstawowy adres lub adresy oraz punkty końcowe 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 dla GetServiceDescriptionInfo
wykorzystuje ServiceDescription do 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 oraz jego ServiceDescription są pobierane z kontekstu operacji. Aby wyświetlić listę podstawowych punktów końcowych usługi, kod iteruje poprzez kolekcję hosta BaseAddresses usługi. Aby wyświetlić listę punktów końcowych usługi, kod iteruje przez kolekcję 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 działania kalkulatora, a następnie informacje o usłudze, które zostały zwrócone przez operację GetServiceDescriptionInfo
. Naciśnij 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ładowy program
Upewnij się, że wykonano procedurę instalacji One-Time 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 Kompilowanie przykładów Windows Communication Foundation.
Aby uruchomić przykład w konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w Uruchamianie przykładów programu Windows Communication Foundation.