Přístup ke službám pomocí klienta WCF

Po vytvoření služby je dalším krokem vytvoření proxy klienta WCF. Klientská aplikace používá ke komunikaci se službou proxy klienta WCF. Klientské aplikace obvykle importují metadata služby pro generování kódu klienta WCF, který lze použít k vyvolání služby.

Mezi základní kroky pro vytvoření klienta WCF patří následující:

  1. Zkompilujte kód služby.

  2. Vygenerujte proxy klienta WCF.

  3. Vytvořte instanci proxy klienta WCF.

Proxy klienta WCF lze generovat ručně pomocí nástroje Service Model Metadata Utility Tool (SvcUtil.exe) další informace naleznete v nástroji ServiceModel Metadata Utility (Svcutil.exe). Proxy klienta WCF lze také vygenerovat v sadě Visual Studio pomocí funkce Přidat odkaz na službu. Chcete-li vygenerovat proxy klienta WCF pomocí některé z metod, musí být služba spuštěna. Pokud je služba hostovaná samostatně, musíte hostitele spustit. Pokud je služba hostovaná ve službě IIS nebo WAS, nemusíte dělat nic jiného.

Nástroj ServiceModel Metadata Utility

Nástroj ServiceModel Metadata Utility (Svcutil.exe) je nástroj příkazového řádku pro generování kódu z metadat. Následující použití je příkladem základního příkazu Svcutil.exe.

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

Alternativně můžete použít Svcutil.exe se soubory WSDL (Web Services Description Language) a XSD (Xml Schema Definition Language) v systému souborů.

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

Výsledkem je soubor kódu, který obsahuje klientský kód WCF, který může klientská aplikace použít k vyvolání služby.

Nástroj můžete také použít k vygenerování konfiguračních souborů.

Svcutil.exe <file1 [,file2]>

Pokud je zadaný jenom jeden název souboru, je to název výstupního souboru. Pokud jsou uvedeny dva názvy souborů, pak první soubor je vstupní konfigurační soubor, jehož obsah se sloučí s vygenerovanou konfigurací a zapíše do druhého souboru. Další informace o konfiguraci naleznete v tématu Konfigurace vazeb pro služby.

Důležité

Požadavky na nezabezpečená metadata představují určitá rizika stejným způsobem jako všechny nezabezpečené síťové požadavky: Pokud si nejste jistí, že koncový bod, se kterým komunikujete, je ten, s kým to říká, můžou být informace, které načítáte, metadata ze škodlivé služby.

Přidání odkazu na službu v sadě Visual Studio

Se spuštěnou službou klikněte pravým tlačítkem myši na projekt, který bude obsahovat proxy klienta WCF, a vyberte Přidat>odkaz na službu. V dialogovém okně Přidat odkaz na službu zadejte adresu URL služby, kterou chcete volat, a klikněte na tlačítko Přejít. V dialogovém okně se zobrazí seznam služeb dostupných na zadané adrese. Poklikáním na službu zobrazíte dostupné kontrakty a operace, zadejte obor názvů pro vygenerovaný kód a klikněte na tlačítko OK .

Příklad

Následující příklad kódu ukazuje kontrakt služby vytvořený pro službu.

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

Nástroj ServiceModel Metadata a Přidat odkaz služby v sadě Visual Studio generuje následující klientskou třídu WCF. Třída dědí z obecné ClientBase<TChannel> třídy a implementuje ICalculator rozhraní. Nástroj také vygeneruje ICalculator rozhraní (zde není zobrazeno).

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

Použití klienta WCF

Chcete-li použít klienta WCF, vytvořte instanci klienta WCF a potom volejte jeho metody, jak je znázorněno v následujícím kódu.

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

Ladění výjimek vyvolaných klientem

Mnoho výjimek vyvolaných klientem WCF je způsobeno výjimkou služby. Tady je několik příkladů:

  • SocketException: Vzdálený hostitel vynutil ukončení existujícího připojení.

  • CommunicationException: Základní připojení se neočekávaně ukončilo.

  • CommunicationObjectAbortedException: Připojení soketu bylo přerušeno. Příčinou může být chyba při zpracování zprávy, překročení časového limitu příjmu vzdáleným hostitelem nebo problém souvisejícího síťového prostředku.

Pokud dojde k těmto typům výjimek, nejlepším způsobem, jak problém vyřešit, je zapnout trasování na straně služby a určit, k jaké výjimce došlo. Další informace o trasování najdete v tématu Trasování a použití trasování k řešení potíží s aplikací.

Viz také