방법: 이중 계약을 사용하여 서비스 액세스
WCF(Windows Communication Foundation)의 한 가지 특징은 이중 메시지 패턴을 사용하는 서비스를 만들 수 있다는 점입니다. 이 패턴을 사용하면 서비스에서 콜백을 통해 클라이언트와 통신할 수 있습니다. 이 항목에서는 콜백 인터페이스를 구현하는 클라이언트 클래스에서 WCF 클라이언트를 만드는 단계를 보여 줍니다.
이중 바인딩은 클라이언트의 IP 주소를 서비스에 노출합니다. 클라이언트는 보안을 사용하여 신뢰하는 서비스에만 연결해야 합니다.
기본 WCF 서비스 및 클라이언트 만드는 방법에 대한 자습서는 초보자를 위한 자습서를 참조하십시오.
이중 서비스에 액세스하려면
두 인터페이스를 포함하는 서비스를 만듭니다. 첫 번째 인터페이스는 서비스에 대한 것이고 두 번째 인터페이스는 콜백에 대한 것입니다. 이중 서비스 만들기에 대한 자세한 내용은 , 방법: 이중 계약 만들기를 참조하십시오.
서비스를 실행합니다.
클라이언트에 대한 계약(인터페이스)을 생성하려면 ServiceModel Metadata 유틸리티 도구(Svcutil.exe)를 사용합니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 방법: Windows Communication Foundation 클라이언트 만들기를 참조하십시오.
다음 예제에 표시된 것처럼 클라이언트 클래스에서 콜백 인터페이스를 구현합니다.
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
InstanceContext 클래스의 인스턴스를 만듭니다. 생성자에 클라이언트 클래스의 인스턴스가 필요합니다.
InstanceContext site = new InstanceContext(new CallbackHandler());
Dim site As InstanceContext = New InstanceContext(new CallbackHandler())
InstanceContext 개체를 필요로 하는 생성자를 사용하여 WCF 클라이언트의 인스턴스를 만듭니다. 생성자의 두 번째 매개 변수는 구성 파일에 있는 끝점의 이름입니다.
CalculatorDuplexClient wcfClient = new CalculatorDuplexClient(site, "default")
Dim wcfClient As New CalculatorDuplexClient(site, "default")
필요한 경우 WCF 클라이언트의 메서드를 호출합니다.
예제
다음 코드 예제에서는 이중 계약에 액세스하는 클라이언트 클래스를 만드는 방법을 보여 줍니다.
Imports System
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
보안
참고 항목
작업
방법: 이중 계약 만들기
방법: Windows Communication Foundation 클라이언트 만들기
방법: ChannelFactory 사용
개념
ServiceModel Metadata 유틸리티 도구(Svcutil.exe)