나는 서로 통신하고, 명령을 실행하고, 데이터를 앞뒤로 전송해야하는 여러 인스턴스가있는 C# 프로그램이 있습니다. 지금 당장은 WM_COPYDATA를 사용하여 수행합니다. 이는 상당히 번거 롭습니다. 이 NetNamedPipeBindings 사용하여 WCF 시스템으로 업그레이드하고 싶습니다. 그러나 어떤 설정을 시도해도 재진입 이중 통신을 사용할 수 없습니다.WCF와 재진입 이중 통신
이 일반 WCF 호출 될 것이다 :
client calls proxy.foo
server executes foo
server finishes foo
client returns from proxy.foo
그리고 이것이 내가 원하는 것입니다 : 비판적
client calls proxy.foo
server executes foo
server calls callback.bar
client executes bar
client calls proxy.baz
server executes baz
server finishes baz
client returns from proxy.baz
client finishes bar
server returns from callback.bar
server finishes foo
client returns from proxy.foo
, 나는 proxy.foo가 동일한 스레드로 호출하는 클라이언트 스레드를 원하는 proxy.baz를 호출합니다. Windows 메시지의 경우 이는 코스와 동일합니다. 그러나 어떤 설정을 시도해도 WCF를 통해 작동하는이 패턴을 얻을 수 없습니다. 심지어 가능할까요?
한숨 ... 나는 COPYDATA를 고수 할 것 같다. 나는 WCF가 이것을지지하지 않는다는 것에 매우 놀랐다. –
나는 이것에 대해 약간의 테스트를했는데 위의 내용이 다소 정확했지만 전체적인 이야기는 아닙니다. : S ConcurrencyMode = ConcurrencyMode.Reentrant를 설정하고 clint 스레드가 SyncFormation 컨텍스트 (예 : WinForm 또는 직접 작성)를 가지고 있으면 콜백은 자동으로 원래 스레드로 marchall됩니다. 클라이언트의 원래 호출을 async'ed로 만들어야하기 때문에 (위에서 설명한대로) 서버 호출이 비동기 패턴을 구현해야합니다. 체크 아웃 할 수있는 "작은"테스트 프로젝트를 만들었습니다 : [link] (http://www.noer.it/upload/Test_WcfReentrant.zip) – Reonekot