Události
Vytváření inteligentních aplikací
17. 3. 23 - 21. 3. 23
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatTento prohlížeč se už nepodporuje.
Upgradujte na Microsoft Edge, abyste mohli využívat nejnovější funkce, aktualizace zabezpečení a technickou podporu.
Jednou z funkcí technologie Windows Communication Foundation (WCF) je schopnost vytvořit službu, která používá model duplexního zasílání zpráv. Tento model umožňuje službě komunikovat s klientem prostřednictvím zpětného volání. Toto téma ukazuje postup vytvoření klienta WCF v klientské třídě, která implementuje rozhraní zpětného volání.
Duální vazba zveřejňuje IP adresu klienta službě. Klient by měl používat zabezpečení, aby se zajistilo, že se připojuje pouze ke službám, kterým důvěřuje.
Kurz vytvoření základní služby WCF a klienta najdete v kurzu Začínáme.
Vytvořte službu, která obsahuje dvě rozhraní. První rozhraní je pro službu, druhá je pro zpětné volání. Další informace o vytvoření duplexní služby naleznete v tématu Postupy: Vytvoření duplexního kontraktu.
Spusťte službu.
Pomocí nástroje ServiceModel Metadata Utility (Svcutil.exe) vygenerujte kontrakty (rozhraní) pro klienta. Informace o tom, jak to provést, naleznete v tématu Postupy: Vytvoření klienta.
Implementujte rozhraní zpětného volání v klientské třídě, jak je znázorněno v následujícím příkladu.
public class CallbackHandler : ICalculatorDuplexCallback
{
public void Result(double result)
{
Console.WriteLine("Result ({0})", result);
}
public void Equation(string equation)
{
Console.WriteLine("Equation({0})", equation);
}
}
Public Class CallbackHandler
Implements ICalculatorDuplexCallback
Public Sub Result (ByVal result As Double)
Console.WriteLine("Result ({0})", result)
End Sub
Public Sub Equation(ByVal equation As String)
Console.WriteLine("Equation({0})", equation)
End Sub
End Class
Vytvořit instanci InstanceContext třídy. Konstruktor vyžaduje instanci klientské třídy.
InstanceContext site = new InstanceContext(new CallbackHandler());
Dim site As InstanceContext = New InstanceContext(new CallbackHandler())
Pomocí konstruktoru, který vyžaduje InstanceContext objekt, vytvořte instanci klienta WCF. Druhým parametrem konstruktoru je název koncového bodu nalezeného v konfiguračním souboru.
CalculatorDuplexClient wcfClient = new CalculatorDuplexClient(site, "default");
Dim wcfClient As New CalculatorDuplexClient(site, "default")
Podle potřeby volejte metody klienta WCF.
Následující příklad kódu ukazuje, jak vytvořit klientskou třídu, která přistupuje k duplexnímu kontraktu.
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
// Define class that implements the callback interface of duplex
// contract.
public class CallbackHandler : ICalculatorDuplexCallback
{
public void Result(double result)
{
Console.WriteLine("Result({0})", result);
}
public void Equation(string equation)
{
Console.WriteLine("Equation({0})", equation);
}
}
public class Client
{
public static void Main()
{
// Picks up configuration from the config file.
CalculatorDuplexClient wcfClient
= new CalculatorDuplexClient(new InstanceContext(new CallbackHandler()));
try
{
// Call the AddTo service operation.
double value = 100.00D;
wcfClient.AddTo(value);
// Call the SubtractFrom service operation.
value = 50.00D;
wcfClient.SubtractFrom(value);
// Call the MultiplyBy service operation.
value = 17.65D;
wcfClient.MultiplyBy(value);
// Call the DivideBy service operation.
value = 2.00D;
wcfClient.DivideBy(value);
// Complete equation.
wcfClient.Clear();
// Wait for callback messages to complete before
// closing.
System.Threading.Thread.Sleep(5000);
// Close the WCF client.
wcfClient.Close();
Console.WriteLine("Done!");
}
catch (TimeoutException timeProblem)
{
Console.WriteLine("The service operation timed out. " + timeProblem.Message);
wcfClient.Abort();
Console.Read();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message);
wcfClient.Abort();
Console.Read();
}
}
}
Imports System.ServiceModel
Namespace Microsoft.ServiceModel.Samples
' The service contract is defined in generatedClient.vb, generated from the service by the svcutil tool.
' Define class which implements callback interface of duplex contract
Public Class CallbackHandler
Implements ICalculatorDuplexCallback
Public Sub Result(ByVal result As Double) Implements ICalculatorDuplexCallback.Result
Console.WriteLine("Result({0})", result)
End Sub
Public Sub Equation(ByVal eqn As String) Implements ICalculatorDuplexCallback.Equation
Console.WriteLine("Equation({0})", eqn)
End Sub
End Class
Class Client
Public Shared Sub Main()
' Construct InstanceContext to handle messages on callback interface
Dim instanceContext As New InstanceContext(New CallbackHandler())
' Create a client
Dim wcfClient As New CalculatorDuplexClient(instanceContext)
Console.WriteLine("Press <ENTER> to terminate client once the output is displayed.")
Console.WriteLine()
Try
' Call the AddTo service operation.
Dim value As Double = 100
wcfClient.AddTo(value)
' Call the SubtractFrom service operation.
value = 50
wcfClient.SubtractFrom(value)
' Call the MultiplyBy service operation.
value = 17.65
wcfClient.MultiplyBy(value)
' Call the DivideBy service operation.
value = 2
wcfClient.DivideBy(value)
' Complete equation
wcfClient.Clear()
Console.ReadLine()
'Closing the client gracefully closes the connection and cleans up resources
wcfClient.Close()
Catch timeout As TimeoutException
Console.WriteLine(timeout.Message)
wcfClient.Abort()
Catch commException As CommunicationException
Console.WriteLine(commException.Message)
wcfClient.Abort()
End Try
End Sub
End Class
End Namespace
Události
Vytváření inteligentních aplikací
17. 3. 23 - 21. 3. 23
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatŠkolení
Modul
Volání metod z knihovny tříd .NET pomocí jazyka C# - Training
Voláním metod, které vracejí hodnoty, přijímají vstupní parametry a další, můžete využívat funkce knihovny tříd .NET.