WCF 콜백을 사용하려면 어떤 단계를 거쳐야 합니까?
저는 WCF를 배우려고 노력하고 있습니다.나는 간단한 클라이언트와 서버 애플리케이션 설정을 가지고 있으며, 클라이언트의 버튼을 누르면 서버에서 업데이트된 값을 얻습니다.
다음 단계는 값을 업데이트하기 위해 서버에서 클라이언트로 콜백을 시도하는 것입니다.저는 많은 예를 들었지만, 그것들은 너무 크고 혼란스러워 보입니다.C#에서 구현한 가장 간단한 예를 보여줄 수 있는 사람이 있습니까?
저는 온라인에서 계속 사례를 살펴보고 있는데 무엇이 필요한지 이해하지 못합니까?물론 예제를 한 줄씩 복사할 수는 있지만, 그래도 내 코드로 이 작업을 수행하려면 무엇을 구현해야 할지 모르기 때문에 아무런 도움이 되지 않습니다.
이를 위해 서버 코드와 클라이언트 코드에서 어떤 단계를 수행해야 하는지에 대한 매우 간단한 예를 들어줄 수 있는 사람이 있습니까?
감사해요.
다음은 제가 생각해 낼 수 있는 가장 간단한 완전한 예입니다.
public interface IMyContractCallback
{
[OperationContract]
void OnCallback();
}
[ServiceContract(CallbackContract = typeof(IMyContractCallback))]
public interface IMyContract
{
[OperationContract]
void DoSomething();
}
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
public class MyService : IMyContract
{
public void DoSomething()
{
Console.WriteLine("Hi from server!");
var callback = OperationContext.Current.GetCallbackChannel<IMyContractCallback>();
callback.OnCallback();
}
}
public class MyContractClient : DuplexClientBase<IMyContract>
{
public MyContractClient(object callbackInstance, Binding binding, EndpointAddress remoteAddress)
: base(callbackInstance, binding, remoteAddress) { }
}
public class MyCallbackClient : IMyContractCallback
{
public void OnCallback()
{
Console.WriteLine("Hi from client!");
}
}
class Program
{
static void Main(string[] args)
{
var uri = new Uri("net.tcp://localhost");
var binding = new NetTcpBinding();
var host = new ServiceHost(typeof(MyService), uri);
host.AddServiceEndpoint(typeof(IMyContract), binding, "");
host.Open();
var callback = new MyCallbackClient();
var client = new MyContractClient(callback, binding, new EndpointAddress(uri));
var proxy = client.ChannelFactory.CreateChannel();
proxy.DoSomething();
// Printed in console:
// Hi from server!
// Hi from client!
client.Close();
host.Close();
}
}
예제를 실행하려면 몇 개의 네임스페이스를 포함해야 합니다.
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
Juval Lowy의 "Programming WCF Services, 2nd Edition" 사본을 가져옵니다.이 책에는 콜백 운영에 관한 많은 섹션이 있습니다.5장에서 214페이지부터 시작합니다.동시성 관리에 대한 장(8장)에는 훨씬 더 많은 정보가 있습니다.
"WCF 서비스 프로그래밍"은 WCF "바이블"입니다.
알아요, 오래된 질문...저는 오늘 아침 구글 검색에서 이 질문을 발견했고 Ray Vernagus가 제공한 답변은 제가 지금까지 읽은 WCF의 가장 이해하기 쉬운 예입니다.VB로 다시 쓸 수 있을 정도로.온라인 변환기를 사용하지 않는 NET.VB를 추가해야겠다고 생각했습니다.Ray Vernagus가 제공한 예제의 NET 변형입니다.새 VB를 만듭니다.NET 윈도우즈 콘솔 응용 프로그램, 참조 추가System.ServiceModel아래의 전체 코드를 기본값으로 복사/수정합니다.Module1클래스 파일
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Public Interface IMyContractCallback
<OperationContract()> _
Sub OnCallBack()
End Interface
<ServiceContract(CallBackContract:=GetType(IMyContractCallback))> _
Public Interface IMyContract
<OperationContract()> _
Sub DoSomething()
End Interface
<ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Reentrant)> _
Public Class Myservice
Implements IMyContract
Public Sub DoSomething() Implements IMyContract.DoSomething
Console.WriteLine("Hi from server!")
Dim callback As IMyContractCallback = OperationContext.Current.GetCallbackChannel(Of IMyContractCallback)()
callback.OnCallBack()
End Sub
End Class
Public Class MyContractClient
Inherits DuplexClientBase(Of IMyContract)
Public Sub New(ByVal callbackinstance As Object, ByVal binding As Binding, ByVal remoteAddress As EndpointAddress)
MyBase.New(callbackinstance, binding, remoteAddress)
End Sub
End Class
Public Class MyCallbackClient
Implements IMyContractCallback
Public Sub OnCallBack() Implements IMyContractCallback.OnCallBack
Console.WriteLine("Hi from client!")
End Sub
End Class
Module Module1
Sub Main()
Dim uri As New Uri("net.tcp://localhost")
Dim binding As New NetTcpBinding()
Dim host As New ServiceHost(GetType(Myservice), uri)
host.AddServiceEndpoint(GetType(IMyContract), binding, "")
host.Open()
Dim callback As New MyCallbackClient()
Dim client As New MyContractClient(callback, binding, New EndpointAddress(uri))
Dim proxy As IMyContract = client.ChannelFactory.CreateChannel()
proxy.DoSomething()
' Printed in console:
' Hi from server!
' Hi from client!
Console.ReadLine()
client.Close()
host.Close()
End Sub
End Module
질문을 제대로 읽은 경우, 클라이언트와 서버 간에 양방향 대화(서버가 클라이언트와 다시 통신할 수 있음)를 원할 수 있습니다.WSDualHttpBinding은 이 기능을 제공합니다.
WCF의 불행한 현실은 간단한 예가 없다는 것입니다.계약을 정의하고, 서비스를 구성하고, 호스트를 사용하고, 클라이언트 코드를 만들어야 합니다.이 기사를 보면 간단한 예를 들 수 있습니다.
언급URL : https://stackoverflow.com/questions/1044174/what-steps-do-i-need-to-take-to-use-wcf-callbacks
'programing' 카테고리의 다른 글
| 각도 2 라우터 기본 href 세트 없음 (0) | 2023.05.08 |
|---|---|
| 어레이로 신속하게 설정 (0) | 2023.05.08 |
| .NET 그래프 라이브러리 주변에 있습니까? (0) | 2023.05.08 |
| Bash에서 함수 인수로 공백이 있는 문자열 전달 (0) | 2023.05.08 |
| Azure PowerShell 버전을 찾으려면 어떻게 해야 합니까? (0) | 2023.05.08 |