Dela via


Exempel på hur du kommer igång

Exemplet GettingStarted visar hur du implementerar en typisk tjänst och en typisk klient med hjälp av Windows Communication Foundation (WCF). Det här exemplet är grunden för alla andra grundläggande teknikexempel.

Kommentar

Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.

Tjänsten beskriver de åtgärder som den utför i ett tjänstkontrakt som exponeras offentligt som metadata. Tjänsten innehåller också koden för att implementera åtgärderna.

Klienten innehåller en definition av tjänstkontraktet och en proxyklass för åtkomst till tjänsten. Proxykoden genereras från tjänstens metadata med hjälp av servicemodelmetadataverktyget (Svcutil.exe).

I Windows Vista finns tjänsten i Windows-aktiveringstjänsten (WAS). I Windows XP och Windows Server 2003 hanteras den av Internet Information Services (IIS) och ASP.NET. Om du är värd för en tjänst i IIS eller WAS kan tjänsten aktiveras automatiskt när den används för första gången.

Kommentar

Om du föredrar att komma igång med ett exempel som är värd för tjänsten i ett konsolprogram i stället för IIS kan du läsa exemplet Självvärd .

Tjänsten och klienten anger åtkomstinformation i konfigurationsfilens inställningar, vilket ger flexibilitet vid tidpunkten för distributionen. Detta inkluderar en slutpunktsdefinition som anger en adress, bindning och ett kontrakt. Bindningen anger transport- och säkerhetsinformation för hur tjänsten ska nås.

Tjänsten konfigurerar ett körningsbeteende för att publicera dess metadata.

Tjänsten implementerar ett kontrakt som definierar ett kommunikationsmönster för begäran-svar. Kontraktet definieras av ICalculator gränssnittet, som exponerar matematiska åtgärder (lägg till, subtrahera, multiplicera och dividera). Klienten skickar begäranden till en viss matematisk åtgärd och tjänsten svarar med resultatet. Tjänsten implementerar ett ICalculator kontrakt som definieras i följande kod.

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

Tjänstimplementeringen beräknar och returnerar lämpligt resultat, enligt följande exempelkod.

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

Tjänsten exponerar en slutpunkt för kommunikation med tjänsten, definierad med hjälp av en konfigurationsfil (Web.config), enligt följande exempelkonfiguration.

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

Tjänsten exponerar slutpunkten på den basadress som tillhandahålls av IIS- eller WAS-värden. Bindningen konfigureras med en standard WSHttpBinding, som tillhandahåller HTTP-kommunikation och standardprotokoll för webbtjänster för adressering och säkerhet. Kontraktet är det ICalculator som implementeras av tjänsten.

Som konfigurerat kan tjänsten nås av http://localhost/servicemodelsamples/service.svc en klient på samma dator. För att klienter på fjärrdatorer ska få åtkomst till tjänsten måste ett fullständigt kvalificerat domännamn anges i stället för localhost.

Ramverket exponerar inte metadata som standard. Därför aktiverar ServiceMetadataBehavior tjänsten och exponerar en MEX-slutpunkt (Metadata Exchange) på http://localhost/servicemodelsamples/service.svc/mex. Följande konfiguration visar detta.

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

Klienten kommunicerar med en viss kontraktstyp med hjälp av en klientklass som genereras av ServiceModel Metadata Utility Tool (Svcutil.exe). Den här genererade klienten finns i filen generatedClient.cs eller generatedClient.vb. Det här verktyget hämtar metadata för en viss tjänst och genererar en klient för användning av klientprogrammet för att kommunicera med en viss kontraktstyp. Den värdbaserade tjänsten måste vara tillgänglig för att generera klientkoden, eftersom tjänsten används för att hämta uppdaterade metadata.

Kör följande kommando från SDK-kommandotolken i klientkatalogen för att generera den inskrivna proxyn:

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

Om du vill generera klienten i Visual Basic skriver du följande från SDK-kommandotolken:

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

Genom att använda den genererade klienten kan klienten komma åt en viss tjänstslutpunkt genom att konfigurera lämplig adress och bindning. Precis som tjänsten använder klienten en konfigurationsfil (App.config) för att ange den slutpunkt som den vill kommunicera med. Klientslutpunktskonfigurationen består av en absolut adress för tjänstslutpunkten, bindningen och kontraktet, enligt följande exempel.

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

Klientimplementeringen instansierar klienten och använder det inskrivna gränssnittet för att börja kommunicera med tjänsten, enligt följande exempelkod.

' 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();

När du kör exemplet visas åtgärdsbegäranden och svar i klientkonsolfönstret. Tryck på RETUR i klientfönstret för att stänga av klienten.

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.

Exemplet Komma igång visar standardsättet för att skapa en tjänst och klient. Den andra Basic-versionen av det här exemplet för att demonstrera specifika produktfunktioner.

Så här konfigurerar du, skapar och kör exemplet

  1. Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.

  2. Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.

  3. Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.

Se även