2011-08-08 3 views
2

하나의 컴퓨터에 배포 된 ASP.NET 웹 응용 프로그램과 다른 컴퓨터에 배포 된 C# Windows 서비스가 있습니다. 사용자가 웹 앱을 통해 새로운 게시를 할 때마다 Windows 서비스에 즉각적인 신호를 보내 해당 정보 처리를 시작하려고합니다.한 컴퓨터의 ASP.NET 응용 프로그램에서 다른 컴퓨터의 .NET Windows 서비스로 신호를 전달하는 가장 좋은 방법은 무엇입니까?

필자는 매개 변수를 전달할 필요가 없습니다. 데이터베이스에 저장된 새로운 데이터 청크 처리를 시작하는 신호입니다.

~ 200 밀리 초 내에 Windows 서비스가 웹 응용 프로그램의 처리 신호를 수신하면 좋을 것입니다.

나의 초기 선택은 Windows 서비스에 WCF를 포함시키고 NetTcpBinding을 사용하는 것이 었습니다. 그러나 WCF는 불행한 선택 인 것으로 드러났습니다.

1) 아주 까다로운 코딩/구성이 필요합니다.

2) 이것은 매우 느립니다. 현재 간단한 호출을하기 위해 한 컴퓨터에서 다른 컴퓨터로 전화하는 데 20 초 (!)가 걸리는 반면이 컴퓨터 사이에서 ping은 1 밀리 초 미만입니다.

3) Microsoft의 WCF 팀은 개발자의 불만 (Google http://www.google.com/search?q=wcf+client+slow 및 직접 참조)에 대한 답변이 부족하다는 점에서 불쌍합니다.

그래서 나는 좋은 대안을 찾고 있습니다. 기사에 http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx

예제는 간단하고 WCF의 괴물보다 복잡 할 것 같다

현재 나의 선택 # 1을 System.Net.Sockets.Socket입니다.

당신이 생각하기에는 좋은 선택일까요? 있다면 그렇습니다.

더 좋은 방법이 있습니까?

운영 체제 : Windows Server 2008 (프로덕션), Windows 7 (개발).

winservice가 여러 개의 요청을 받으면 모든 새로운 데이터가 완전히 처리 될 때까지 단순히 데이터를 처리합니다.

업데이트 1 : 왜 downvoting?

업데이트 2 : 가끔 신호가 끊길 수 있습니다. 어쨌든 매분 winservice에 새 게시물을 재 처리합니다. 난 그냥 대부분의 게시물은 거의 즉시 사용자가 그들을 저장 한 후 처리되었는지 확인하고 싶습니다.

답변

4

백 엔드 서비스에서 처리 할 메시지를 대기열에 넣으려면 MSMQ를 사용하는 것이 좋습니다. Tcp는 메시지/신호가 손실되지 않도록 계획을 세울 때 신뢰할 수 없습니다.

+0

대기열에 여러 요청이있는 문제를 이미 해결했습니다. winservice에서 여러 개의 요청을 처리하면 모든 새 데이터가 완전히 처리 될 때까지 단순히 데이터를 처리합니다. 처리를 시작할 시점에 대해 winservice에 신속하게 알릴 필요가 있습니다. –

+1

Message Queue가 아마도 가장 강력한 솔루션이라는 데 동의합니다. 서비스는 대기열에서들을 수 있으며 메시지가 나타나면 바로 당겨 처리 할 수 ​​있습니다. 이것은 비동기 적으로 수행 될 수 있습니다. 웹 응용 프로그램의 유일한 의무는 쉽게 대기열에 메시지를 입금하는 것입니다. –

+0

내 웹 응용 프로그램 (클라이언트)이있는 서버 또는 내 winservice (서버)가있는 서버에서 Message Queue를 호스팅해야하는 서버는 무엇입니까? –

1

.NET Remoting을 고려 했습니까? 공식적으로 그것은 WCF에 찬성하여 더 이상 사용되지 않으며 엔터프라이즈 시스템과 관련하여 그 반대에 대한 충분한 이유가 있습니다. 그럼에도 불구하고 현재 프로젝트 (.net 3.5)는 문제없이이 프로젝트를 사용합니다.

난 당신의 좌절감을 WCF와 공유합니다. 빠르고 쉽게 작동시켜야하는 것처럼 보입니다. 간단한 Hello World 웹 서비스를 시작하는 데 필요한 구성의 양은 낙담합니다. 그러나 나는 어딘가에 WCF에 최소한의 저항이 있음을 알기를 바란다. 아직 알지 못하는 실전 경험이 부족하다.

0

나는 MassTransit 또는 NServiceBus과 같은 것을 살펴볼 것입니다.

특히 이것이 더 많은 장소에서 작업하거나 계획을 세울 계획이라면. MSMQ를 통과 할 수 있고 응용 프로그램 섹션간에 메시지를 전송할 수있는 견고한 서비스 버스를 제공해야합니다.

0

ASP 코드에서 UDP 브로드 캐스트를하는 것은 어떻습니까? UDP는 본질적으로 신뢰할 수 없지만 LAN에서는 거의 문제가되지 않습니다. ASP 코드는 메시지가 전달되고 처리되었음을 확신하지 않지만, 원하는 메시지가 아니거나 모으는 메시지를 수집합니다. 가장 중요한 것은 UDP 브로드 캐스트가 매우 저렴하고 송수신이 매우 빠르다는 것입니다.

관련 문제