Megosztás a következőn keresztül:


Szolgáltatások elérése WCF-ügyféllel

A szolgáltatás létrehozása után a következő lépés egy WCF-ügyfélproxy létrehozása. Az ügyfélalkalmazás a WCF-ügyfélproxyval kommunikál a szolgáltatással. Az ügyfélalkalmazások általában importálják a szolgáltatás metaadatait a szolgáltatás meghívásához használható WCF-ügyfélkód létrehozásához.

A WCF-ügyfél létrehozásának alapvető lépései a következők:

  1. Állítsa össze a szolgáltatáskódot.

  2. Hozza létre a WCF-ügyfélproxyt.

  3. Hozza létre a WCF-ügyfélproxyt.

A WCF-ügyfélproxy manuálisan hozható létre a Service Model Metadata Segédprogram (SvcUtil.exe) használatával. További információkért lásd: ServiceModel Metadata Utility Tool (Svcutil.exe). A WCF-ügyfélproxy a Visual Studióban is létrehozható a Szolgáltatás hozzáadása referencia funkcióval. Ha a WCF-ügyfélproxyt bármelyik módszerrel szeretné létrehozni, a szolgáltatásnak futnia kell. Ha a szolgáltatás saját üzemeltetésű, futtatnia kell a gazdagépet. Ha a szolgáltatást az IIS/WAS szolgáltatás üzemelteti, akkor semmi mást nem kell tennie.

ServiceModel Metadata Segédprogram

A ServiceModel Metadata Segédprogram (Svcutil.exe) egy parancssori eszköz, amely metaadatokból hoz létre kódot. Az alábbi példa egy egyszerű Svcutil.exe parancsra mutat be.

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

Másik lehetőségként használhatja a Svcutil.exe Web Services Description Language (WSDL) és XML-sémadefiníciós nyelv (XSD) fájlokkal a fájlrendszeren.

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

Az eredmény egy olyan kódfájl, amely WCF-ügyfélkódot tartalmaz, amelyet az ügyfélalkalmazás használhat a szolgáltatás meghívásához.

Az eszközzel konfigurációs fájlokat is létrehozhat.

Svcutil.exe <file1 [,file2]>

Ha csak egy fájlnév van megadva, az a kimeneti fájl neve. Ha két fájlnevet ad meg, akkor az első fájl egy bemeneti konfigurációs fájl, amelynek tartalma egyesítve lesz a létrehozott konfigurációval, és a második fájlba van írva. A konfigurációval kapcsolatos további információkért lásd a Kötések konfigurálása szolgáltatásokhoz című témakört.

Fontos

A nem biztonságos metaadat-kérések bizonyos kockázatokat ugyanúgy jelentenek, mint bármely nem biztonságos hálózati kérés: Ha nem biztos abban, hogy az a végpont, amellyel kommunikál, azt mondja, hogy ki az, akkor a lekért információk egy rosszindulatú szolgáltatás metaadatai lehetnek.

Szolgáltatáshivatkozás hozzáadása a Visual Studióban

Ha a szolgáltatás fut, kattintson a jobb gombbal a WCF-ügyfélproxyt tartalmazó projektre, és válassza a Szolgáltatáshivatkozás hozzáadása>lehetőséget. A Szolgáltatás hozzáadása referencia párbeszédpanelen írja be a meghívni kívánt szolgáltatás URL-címét, és kattintson az Ugrás gombra. A párbeszédpanelen megjelenik a megadott címen elérhető szolgáltatások listája. Kattintson duplán a szolgáltatásra az elérhető szerződések és műveletek megtekintéséhez, adjon meg egy névteret a létrehozott kódhoz, majd kattintson az OK gombra.

Példa

Az alábbi példakód egy szolgáltatáshoz létrehozott szolgáltatási szerződést mutat be.

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

A ServiceModel Metadata segédprogram és a Service Reference hozzáadása a Visual Studióban a következő WCF-ügyfélosztályt hozza létre. Az osztály örökli az általános ClientBase<TChannel> osztályt, és implementálja a ICalculator felületet. Az eszköz a felületet is létrehozza ICalculator (itt nem látható).

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

A WCF-ügyfél használata

A WCF-ügyfél használatához hozza létre a WCF-ügyfél egy példányát, majd hívja meg a metódusait az alábbi kódban látható módon.

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

Ügyfél által kidobott kivételek hibakeresése

A WCF-ügyfél által kiváltott számos kivételt a szolgáltatás kivétele okozza. Néhány példa erre:

  • SocketException: A távoli gazdagép kényszerítetten bezárt egy meglévő kapcsolatot.

  • CommunicationException: A mögöttes kapcsolat váratlanul bezárult.

  • CommunicationObjectAbortedException: A szoftvercsatorna-kapcsolat megszakadt. Ezt okozhatja az üzenet feldolgozása során fellépő hiba, a távoli gazdagép által túllépett fogadási időtúllépés vagy egy mögöttes hálózati erőforrás-probléma.

Ilyen típusú kivételek esetén a probléma megoldásának legjobb módja, ha bekapcsolja a nyomkövetést a szolgáltatás oldalán, és meghatározza, hogy milyen kivétel történt ott. További információ a nyomkövetésről: Nyomkövetés és nyomkövetés használata az alkalmazás hibaelhárításához.

Lásd még