Megosztás:


Szolgáltatás leírása

A ServiceDescription minta bemutatja, hogy egy szolgáltatás hogyan tudja lekérni a szolgáltatás leírási adatait futásidőben. A minta az első lépéseken alapul, és egy további szolgáltatásművelet van meghatározva, amely leíró információkat ad vissza a szolgáltatásról. A visszaadott információk a szolgáltatás alapcímeit és végpontjait sorolják fel. A szolgáltatás ezeket az információkat a , OperationContextés ServiceHost osztályok ServiceDescriptionhasználatával biztosítja.

Ebben a mintában az ügyfél egy konzolalkalmazás (.exe), és a szolgáltatást az Internet Information Services (IIS) üzemelteti.

Megjegyzés:

A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.

Ez a minta a kalkulátorszerződés módosított verzióját használja IServiceDescriptionCalculator. A szerződés egy további szolgáltatásműveletet határoz meg, GetServiceDescriptionInfo amely egy többsoros sztringet ad vissza az ügyfélnek, amely leírja a szolgáltatás alapcímét, címét és szolgáltatásvégpontjait vagy végpontjait.

[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();
}

A megvalósítási GetServiceDescriptionInfo kód a ServiceDescription szolgáltatásvégpontok listázására szolgál. Mivel a szolgáltatásvégpontok relatív címekkel rendelkezhetnek, először felsorolja a szolgáltatás alapcímeit. Az összes információ lekéréséhez a kód Current használatával lekéri a műveleti környezetét. A ServiceHost és annak ServiceDescription objektuma a műveleti környezetből van lekérve. A szolgáltatás alapvégpontjainak listázásához a kód végigmegy a szolgáltatásgazda BaseAddresses gyűjteményén. A szolgáltatás szolgáltatásvégpontjainak listázásához a kód végigvezeti a szolgáltatás leírásának végpontgyűjteményén.

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;
}

A minta futtatásakor megjelennek a számológép műveletei, majd a művelet által visszaadott GetServiceDescriptionInfo szolgáltatásadatok. Nyomja le az ENTER billentyűt az ügyfélablakban az ügyfél leállításához.

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.

A példa beállítása, elkészítése és futtatása

  1. Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time beállítási eljárását.

  2. A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse Windows Communication Foundation-mintákcímű témakör utasításait.

  3. Ha a mintát egy vagy több gép közötti konfigurációban szeretné futtatni, kövesse A Windows Communication Foundation-minták futtatásacímű témakör utasításait.