Ukázka Začínáme

Ukázka GettingStarted ukazuje, jak implementovat typickou službu a typického klienta pomocí technologie Windows Communication Foundation (WCF). Tento vzorek je základem všech ostatních základních technologických ukázek.

Poznámka:

Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.

Služba popisuje operace, které provádí ve smlouvě o poskytování služeb, které veřejně zveřejňuje jako metadata. Služba obsahuje také kód pro implementaci operací.

Klient obsahuje definici kontraktu služby a třídu proxy pro přístup ke službě. Kód proxy serveru se generuje z metadat služby pomocí nástroje ServiceModel Metadata Utility (Svcutil.exe).

Ve Windows Vista je služba hostovaná ve službě aktivace systému Windows (WAS). V systémech Windows XP a Windows Server 2003 je hostovaná službou Internetová informační služba (IIS) a ASP.NET. Hostování služby ve službě IIS nebo WAS umožňuje automatické aktivaci služby při prvním přístupu.

Poznámka:

Pokud chcete raději začít s ukázkou, která je hostitelem služby v konzolové aplikaci místo služby IIS, podívejte se na ukázku samoobslužného hostitele .

Služba a klient určují podrobnosti o přístupu v nastavení konfiguračního souboru, které poskytují flexibilitu v době nasazení. To zahrnuje definici koncového bodu, která určuje adresu, vazbu a kontrakt. Vazba určuje podrobnosti přenosu a zabezpečení pro přístup ke službě.

Služba konfiguruje chování za běhu pro publikování metadat.

Služba implementuje kontrakt, který definuje komunikační vzor žádosti a odpovědi. Kontrakt je definován ICalculator rozhraním, které zveřejňuje matematické operace (sčítání, odčítání, násobení a dělení). Klient odešle požadavky na danou matematickou operaci a služba odpoví výsledkem. Služba implementuje ICalculator kontrakt definovaný v následujícím kódu.

' Define a service contract.
    <ServiceContract(Namespace:="http://Microsoft.Samples.GettingStarted")>
     Public Interface ICalculator
        <OperationContract()>
        Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()>
        Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()>
        Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()>
        Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
    End Interface
// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
}

Implementace služby vypočítá a vrátí odpovídající výsledek, jak je znázorněno v následujícím ukázkovém kódu.

' Service class which implements the service contract.
Public Class CalculatorService
Implements ICalculator
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
Return n1 + n2
End Function

Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
Return n1 - n2
End Function

Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
Return n1 * n2
End Function

Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
Return n1 / n2
End Function
End Class
// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
    public double Add(double n1, double n2)
    {
        return n1 + n2;
    }
    public double Subtract(double n1, double n2)
    {
        return n1 - n2;
    }
    public double Multiply(double n1, double n2)
    {
        return n1 * n2;
    }
    public double Divide(double n1, double n2)
    {
        return n1 / n2;
    }
}

Služba zveřejňuje koncový bod pro komunikaci se službou definovanou pomocí konfiguračního souboru (Web.config), jak je znázorněno v následující ukázkové konfiguraci.

<services>
    <service
        name="Microsoft.ServiceModel.Samples.CalculatorService"
        behaviorConfiguration="CalculatorServiceBehavior">
        <!-- ICalculator is exposed at the base address provided by
         host: http://localhost/servicemodelsamples/service.svc.  -->
       <endpoint address=""
              binding="wsHttpBinding"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
       ...
    </service>
</services>

Služba zveřejňuje koncový bod na základní adrese poskytované službou IIS nebo hostitelem WAS. Vazba se konfiguruje se standardním WSHttpBindingprotokolem , který poskytuje komunikaci HTTP a standardní protokoly webových služeb pro adresování a zabezpečení. Smlouva je ICalculator implementovaná službou.

Jak je nakonfigurováno, může ke službě přistupovat http://localhost/servicemodelsamples/service.svc klient na stejném počítači. Pro klienty na vzdálených počítačích pro přístup ke službě musí být místo localhost zadán plně kvalifikovaný název domény.

Architektura ve výchozím nastavení nezpřístupňuje metadata. Služba proto zapne ServiceMetadataBehavior koncový bod výměny metadat (MEX) a zveřejní ho na adrese http://localhost/servicemodelsamples/service.svc/mex. Toto ukazuje následující konfigurace.

<system.serviceModel>
  <services>
    <service
        name="Microsoft.ServiceModel.Samples.CalculatorService"
        behaviorConfiguration="CalculatorServiceBehavior">
      ...
      <!-- the mex endpoint is exposed at
       http://localhost/servicemodelsamples/service.svc/mex -->
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />
    </service>
  </services>

  <!--For debugging purposes set the includeExceptionDetailInFaults
   attribute to true-->
  <behaviors>
    <serviceBehaviors>
      <behavior name="CalculatorServiceBehavior">
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="False" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

Klient komunikuje pomocí daného typu kontraktu pomocí třídy klienta, která je generována nástrojem ServiceModel Metadata Utility (Svcutil.exe). Tento vygenerovaný klient je obsažen v souboru generatedClient.cs nebo generatedClient.vb. Tento nástroj načte metadata pro danou službu a vygeneruje klienta pro použití klientskou aplikací ke komunikaci pomocí daného typu kontraktu. Hostovaná služba musí být k dispozici pro vygenerování kódu klienta, protože služba se používá k načtení aktualizovaných metadat.

Spuštěním následujícího příkazu z příkazového řádku sady SDK v klientském adresáři vygenerujte zadaný proxy server:

svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs

Chcete-li vygenerovat klienta v jazyce Visual Basic, zadejte následující příkaz z příkazového řádku sady SDK:

Svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /l:vb /out:generatedClient.vb

Pomocí vygenerovaného klienta má klient přístup k danému koncovému bodu služby konfigurací příslušné adresy a vazby. Podobně jako služba klient používá konfigurační soubor (App.config) k určení koncového bodu, se kterým chce komunikovat. Konfigurace koncového bodu klienta se skládá z absolutní adresy koncového bodu služby, vazby a kontraktu, jak je znázorněno v následujícím příkladu.

<client>
     <endpoint
         address="http://localhost/servicemodelsamples/service.svc"
         binding="wsHttpBinding"
         contract=" Microsoft.ServiceModel.Samples.ICalculator" />
</client>

Implementace klienta vytvoří instanci klienta a použije typové rozhraní k zahájení komunikace se službou, jak je znázorněno v následujícím ukázkovém kódu.

' Create a client
Dim client As New CalculatorClient()

' Call the Add service operation.
            Dim value1 = 100.0R
            Dim value2 = 15.99R
            Dim result = client.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)

' Call the Subtract service operation.
value1 = 145.00R
value2 = 76.54R
result = client.Subtract(value1, value2)
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result)

' Call the Multiply service operation.
value1 = 9.00R
value2 = 81.25R
result = client.Multiply(value1, value2)
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result)

' Call the Divide service operation.
value1 = 22.00R
value2 = 7.00R
result = client.Divide(value1, value2)
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result)

'Closing the client gracefully closes the connection and cleans up resources
// Create a client.
CalculatorClient client = new CalculatorClient();

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);

//Closing the client releases all communication resources.
client.Close();

Při spuštění ukázky se požadavky na operace a odpovědi zobrazí v okně konzoly klienta. Stisknutím klávesy ENTER v okně klienta klienta ukončete klienta.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Ukázka Začínáme ukazuje standardní způsob vytvoření služby a klienta. Druhá základní ukázka vychází z této ukázky, která demonstruje konkrétní funkce produktu.

Nastavení, sestavení a spuštění ukázky

  1. Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.

  2. Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.

  3. Pokud chcete spustit ukázku v konfiguraci s jedním nebo více počítači, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.

Viz také