2009-05-25 6 views
6

저는 서버가 기본적으로 ASP .NET 웹 응용 프로그램이고 분산 클라이언트는 클라이언트 - 서버 응용 프로그램입니다. 데스크톱 애플리케이션.클라이언트 (데스크톱 응용 프로그램)는 데이터를 가져 오지만 ... 서버 (웹 응용 프로그램)가 데이터를 밀어 넣기를 원합니다.

클라이언트는 클라이언트에 대한 새로운 데이터가있을 때 서버에서 일부 데이터를 수신해야합니다. 현재 클라이언트가 x 분 (예 : 2 분) 동안 웹 서비스를 계속 쿼리하고 클라이언트에 대한 새로운 데이터가 있는지 계속 확인합니다.

이상적으로 작동하는 방식은 데스크톱 응용 프로그램이 사용 가능한 시점에 업데이트를 받아야하며 서버에서 가져올 필요가 없습니다. 대신 서버는 클라이언트에 푸시 할 수 있어야합니다.

솔루션의 아키텍처에서 웹 응용 프로그램이 동일한 네트워크 (LAN)의 데스크톱 응용 프로그램 (클라이언트)으로 데이터를 전송해야 할 때 어떻게해야합니까?

답변

7

현재 "COMET"이라고 불리는 "서버 푸시"에 대해 설명하고 있습니다. 웹 검색에서 이러한 키워드를 사용하면 많은 유용한 정보를 얻을 수 있습니다.

가장 일반적인 기법은 "hanging GET"입니다. 클라이언트는 특정 URL에 GET 요청을 전송하고 서버는 연결을 허용하지만 전송할 데이터가있을 때까지 응답을 지연합니다. 클라이언트는 응답을 받으면 다른 GET을 전송하여 다른 메시지를 준비합니다.

+1

IHttpAsyncHandler (http://msdn.microsoft.com/en-us/magazine/cc164128.aspx) 및 System.Threading.Monitor를 사용하여 (일종의) 이벤트 기반 이벤트를 손쉽게 빌드 할 수 있다는 메모를 보내고 싶었습니다. .NET에서 "서버 푸시"2.0 누군가가 이것에 대한 완전한 유틸리티 클래스를 알고 있다면 일부 링크를 게시하십시오. – Radu094

+0

모든 클라이언트에 대해 서버는 하나의 소켓 연결을 유지해야합니다. 그래서 그것은 아니오 일 때 작동하지 않습니다. 의 고객은 미리 예측할 수 없습니다. –

0

소켓을 열어 둘 수 있으면 클라이언트는 서버에 연결할 수 있으며 서버는 필요할 때 데이터를 소켓으로 밀어 넣을 수 있습니다. 연결을 시작하는 측이 항상 데이터 전송을 시작해야하는 이유는 없습니다.

+0

이 응용 프로그램은 산업에서 일반적인 인트라넷을위한 것입니다. 소켓 연결을 사용합니다. 즉, 소켓을 사용하면 액세스를 위해 열어야하는 포트가 필요합니다. 방화벽 등을 재구성하는 것입니다. 합리적인 설치가 필요한지 아니면 산업용 클라이언트가 일반적으로 반대합니까? – Sameet

+0

HTTP 연결은 소켓입니다. 대답은 (올바르게) 추천하는 것은 클라이언트가 GET을 보내지 만, 서버는 보낼 준비가 될 때까지 응답을 되돌려 보내는 것을 지연합니다. –

+0

예,하지만 HTTP 연결은 방화벽에 의해 차단되지 않은 포트 80에 있습니까? 당신이 묘사 한 내용은 완벽하게 들립니다 - 서버는 데이터가있을 때까지 응답을 연기합니다 - 어떻게 할 것인가? – Sameet

2

WCF 콜백을 사용할 수 있습니다. 이는 클라이언트의 알림을 구독 할 수있는 웹 서비스이며 서버는 가입 한 클라이언트에게 메시지를 보냅니다. 내 블로그에 beginners guide이 있습니다.

+0

WCF? .NET 2.0 이상? 안타깝게도 .NET 2.0은 내가 필요로하는 제한 사항입니까? 이 경우 WCF 콜백이 도움이됩니까? – Sameet

+0

아니, 두려워하지 않는 WCF 만이야. – blowdart

1

SO question에 관심이있을 수 있습니다. Comet 응용 프로그램처럼 클라이언트에 대한 서버 푸시 (Push)와 같은 소리로 묘사됩니다.

1

체크 아웃 WebSync; 그것은 ASP.NET/IIS를위한 Comet 솔루션이지만, 톰 클라이언트, 윈도우 서비스 등과의 통합을 가능하게하는 완전한 .NET 클라이언트도 있습니다. 따라서 법안에 잘 부합해야합니다.