2012-06-19 4 views
1

클라이언트가 정적이 아닌 IP로 방화벽 뒤에있을 클라이언트/서비스 프로젝트를 개발 중입니다. 클라이언트는 서비스를 호출합니다. 그런 다음 나중에 몇 시간 후에 서비스가 클라이언트에 대한 데이터를 가지고있을 때 클라이언트에게 문의하십시오. 서비스 당 많은 고객이있을 것입니다.비동기식 비동기 호출 - WCF 또는 WF

연결을 계속 유지하는 것으로 보인 몇 개의 WCF 샘플이 있었지만,하지 않을 것을 권장합니다. 몇 가지 WF 예제에서 시간 초과가 만료 된 후 서비스가 클라이언트에 접속할 수있는 것처럼 보였습니다 (아마도 다른 연결로 인해).

저는이 기술에 익숙하지 만 샘플을 연구하고 테스트하는 데 수많은 시간을 투자했습니다. 더 명확하게 나는 가장 좋은 해결책에 대해 읽었습니다. WF가 나에게 가장 적합한 솔루션인가 아니면 WCF로 원하는 결과를 얻을 수 있습니까?

답변

1

클라이언트에 연결하려고하지만 연결을 열어 둘 수없는 경우 클라이언트는 사용할 엔드 포인트를 공개해야합니다. 이 클라이언트는 직접 클라이언트가 아닐 수도 있지만 내부 서버로 클라이언트를 등록한 다음 해당 서버가 엔드 포인트를 노출하고 사용자로부터 데이터를 수신 할 때 호출을 클라이언트로 라우팅합니다.

그러나 엔드 포인트를 어딘가에 노출시키지 않으면 클라이언트에 접속할 수 없습니다.

의미가 있습니까?

WF 또한 WCF 대, WCF 엔드 포인트가 노출되고 소비 될 수있는 통신 프레임 워크 명심. WF는 WCF 끝점을 통해 자체를 노출 할 수있는 워크 플로 프레임 워크입니다. WF는 WCF없이 실행될 수 있기 때문에 완전히 다른 기술이며 다른 기술에 의존하지 않습니다.

+0

엔드 포인트를 표시하는 데 정적 IP가 필요합니까? 최후의 수단으로 DurableDuplex와 같은 연결을 유지하는 것이 옵션일까요? – Daniel

+0

필자는 이러한 클라이언트 엔드 포인트가 "업무상 중요한"방법에 의존 할 것입니다. 예를 들어 ISP에서 임대 한 IP를 통해 가정의 컴퓨터에서 WCF 끝점을 노출 할 수 있습니다. IP는 임대 기간에 "정적"입니다. 이 클라이언트 엔드 포인트가 "미션 크리티컬 (mission critical)"이라면 정적 IP를 가져 오는 것이 좋습니다. 또는 일정에 따라 IP를 실행하고 확인한 클라이언트에 .NET 프로그램을 작성하여 서버에 정보를 전송하여 계속 유지할 수 있습니다. 클라이언트 IP 주소가 업데이트되었습니다. –

+0

입력 해 주셔서 감사합니다. 아마도 wcf duplex를 사용하여 최대 연결 수를 최대 30 개로 유지하고 필요할 때 데이터를 누를 수 있습니다. – Daniel

0

WF는 WCF를 통해 외부 세계에 계속 노출됩니다. "시간 후반"측면을 고려할 때 실제로 클라이언트와 WCF 서비스 간의 상호 작용 방식과 처리 자체를 수행하는 프로세스 (몇 시간이 걸리는 부분)라는 두 가지 측면이 있습니다. 두 번째는 긴 프로세스 인 WF에서 의미가있을 수 있습니다. 첫 번째 방법은 SignalR과 같은 프레임 워크를 사용하는 것이 좋습니다.

1

더 나은 솔루션은이 시나리오에서 대기열을 사용하는 것입니다. 나는 ServiceBus를 사용하여 클라이언트가 준비되었을 때 대기 할 수있는 대기열에 메시지를 게시합니다. 또한 MSMQ를 사용하여 동일한 작업을 수행하거나 심지어 데이터베이스를 대기열로 사용할 수 있습니다.

+0

론, 몇 가지 동영상과 기사를 보았습니다. 매우 유익합니다. 대기열 설정은 갈 수있는 방법 일지 모르지만 나는 서버에 대한 모든 폴링을 줄이기 위해 노력하고 있으며 db에 쿼리하여 클라이언트에 사용할 수있는 데이터가 있는지 확인합니다. – Daniel

+0

@RonJacobs 이제 흥미로운 접근 방법이며 솔직히 정말로 경량이 될 것입니다. 나는 그것을 염두에두고있을거야. –