Dela via


Åtkomst till tjänster med hjälp av en WCF-klient

När du har skapat en tjänst är nästa steg att skapa en WCF-klientproxy. Ett klientprogram använder WCF-klientproxyn för att kommunicera med tjänsten. Klientprogram importerar vanligtvis en tjänsts metadata för att generera WCF-klientkod som kan användas för att anropa tjänsten.

De grundläggande stegen för att skapa en WCF-klient är följande:

  1. Kompilera tjänstkoden.

  2. Generera WCF-klientproxyn.

  3. Instansiera WCF-klientproxyn.

WCF-klientproxyn kan genereras manuellt med hjälp av verktyget för tjänstmodellmetadata (SvcUtil.exe) för mer information, servicemodelmetadataverktyg (Svcutil.exe). WCF-klientproxyn kan också genereras i Visual Studio med hjälp av funktionen Lägg till tjänstreferens . Om du vill generera WCF-klientproxyn med någon av metoderna måste tjänsten köras. Om tjänsten är lokalt installerad måste du köra värden. Om tjänsten finns i IIS/WAS behöver du inte göra något annat.

Verktyg för ServiceModel-metadata

Verktyget servicemodelmetadata (Svcutil.exe) är ett kommandoradsverktyg för att generera kod från metadata. Följande användning är ett exempel på ett grundläggande Svcutil.exe kommando.

Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>

Du kan också använda Svcutil.exe med WSDL-filer (Web Services Description Language) och XSD-filer (XML Schema Definition Language) i filsystemet.

Svcutil.exe <list of WSDL and XSD files on file system>

Resultatet är en kodfil som innehåller WCF-klientkod som klientprogrammet kan använda för att anropa tjänsten.

Du kan också använda verktyget för att generera konfigurationsfiler.

Svcutil.exe <file1 [,file2]>

Om endast ett filnamn anges är det namnet på utdatafilen. Om två filnamn anges är den första filen en indatakonfigurationsfil vars innehåll sammanfogas med den genererade konfigurationen och skrivs ut i den andra filen. Mer information om konfiguration finns i Konfigurera bindningar för tjänster.

Viktigt!

Oskyddade metadatabegäranden utgör vissa risker på samma sätt som alla oskyddade nätverksbegäranden gör: Om du inte är säker på att slutpunkten du kommunicerar med är den som den säger att den är, kan informationen du hämtar vara metadata från en skadlig tjänst.

Lägg till tjänstreferens i Visual Studio

När tjänsten körs högerklickar du på projektet som ska innehålla WCF-klientproxyn och väljer Lägg till>tjänstreferens. I dialogrutan Lägg till tjänstreferens skriver du in URL:en till den tjänst som du vill anropa och klickar på knappen Gå. Dialogrutan visar en lista över tjänster som är tillgängliga på den adress som du anger. Dubbelklicka på tjänsten för att se vilka kontrakt och åtgärder som är tillgängliga, ange ett namnområde för den genererade koden och klicka på KNAPPEN OK .

Exempel

I följande kodexempel visas ett tjänstkontrakt som skapats för en tjänst.

// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    // Other methods are not shown here.
}
' Define a service contract.
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _
Public Interface ICalculator
    <OperationContract()>  _
    Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
    ' Other methods are not shown here.
End Interface

Verktyget ServiceModel Metadata och Lägg till tjänstreferens i Visual Studio genererar följande WCF-klientklass. Klassen ärver från den generiska ClientBase<TChannel> klassen och implementerar ICalculator gränssnittet. Verktyget genererar ICalculator också gränssnittet (visas inte här).

public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
    public CalculatorClient()
    {}

    public CalculatorClient(string endpointConfigurationName) :
            base(endpointConfigurationName)
    {}

    public CalculatorClient(string endpointConfigurationName, string remoteAddress) :
            base(endpointConfigurationName, remoteAddress)
    {}

    public CalculatorClient(string endpointConfigurationName,
        System.ServiceModel.EndpointAddress remoteAddress) :
            base(endpointConfigurationName, remoteAddress)
    {}

    public CalculatorClient(System.ServiceModel.Channels.Binding binding,
        System.ServiceModel.EndpointAddress remoteAddress) :
            base(binding, remoteAddress)
    {}

    public double Add(double n1, double n2)
    {
        return base.Channel.Add(n1, n2);
    }
}
Partial Public Class CalculatorClient
    Inherits System.ServiceModel.ClientBase(Of ICalculator)
    Implements ICalculator

    Public Sub New()
        MyBase.New
    End Sub

    Public Sub New(ByVal endpointConfigurationName As String)
        MyBase.New(endpointConfigurationName)
    End Sub

    Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)
        MyBase.New(endpointConfigurationName, remoteAddress)
    End Sub

    Public Sub New(ByVal endpointConfigurationName As String,
        ByVal remoteAddress As System.ServiceModel.EndpointAddress)
        MyBase.New(endpointConfigurationName, remoteAddress)
    End Sub

    Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding,
        ByVal remoteAddress As System.ServiceModel.EndpointAddress)
        MyBase.New(binding, remoteAddress)
    End Sub

    Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
        Implements ICalculator.Add
        Return MyBase.Channel.Add(n1, n2)
    End Function
End Class

Använda WCF-klienten

Om du vill använda WCF-klienten skapar du en instans av WCF-klienten och anropar sedan dess metoder enligt följande kod.

// Create a client object with the given client endpoint configuration.
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint");
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = calcClient.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
' Create a client object with the given client endpoint configuration.
Dim calcClient As CalculatorClient = _
New CalculatorClient("CalculatorEndpoint")

' Call the Add service operation.
Dim value1 As Double = 100.00D
Dim value2 As Double = 15.99D
Dim result As Double = calcClient.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)

Felsöka undantag som genereras av en klient

Många undantag som genereras av en WCF-klient orsakas av ett undantag för tjänsten. Några exempel på detta är:

  • SocketException: En befintlig anslutning stängdes av fjärrvärden med två två skäl.

  • CommunicationException: Den underliggande anslutningen stängdes oväntat.

  • CommunicationObjectAbortedException: Socket-anslutningen avbröts. Detta kan orsakas av ett fel när meddelandet bearbetas, en tidsgräns för att ta emot överskrids av fjärrvärden eller ett underliggande problem med nätverksresursen.

När dessa typer av undantag inträffar är det bästa sättet att lösa problemet att aktivera spårning på tjänstsidan och avgöra vilket undantag som inträffade där. Mer information om spårning finns i Spåra och använda spårning för att felsöka ditt program.

Se även