Sdílet prostřednictvím


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 hostování zajišťováno pomocí Internetové informační služby (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í modulu runtime 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.

Služba může být díky své konfiguraci dostupná klientovi na stejném počítači na http://localhost/servicemodelsamples/service.svc. 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. Proto služba zapne ServiceMetadataBehavior a zveřejní koncový bod výměny metadat (MEX) 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 vygenerované 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. Další verze základu vychází z tohoto příkladu, aby demonstrovala konkrétní funkce produktu.

Jak nastavit, sestavit a spustit ukázku

  1. Ujistěte se, že jste provedli instalační proceduru One-Time pro ukázky Windows Communication Foundation.

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

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

Viz také