하나의 컴퓨터에 배포 된 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에 새 게시물을 재 처리합니다. 난 그냥 대부분의 게시물은 거의 즉시 사용자가 그들을 저장 한 후 처리되었는지 확인하고 싶습니다.
대기열에 여러 요청이있는 문제를 이미 해결했습니다. winservice에서 여러 개의 요청을 처리하면 모든 새 데이터가 완전히 처리 될 때까지 단순히 데이터를 처리합니다. 처리를 시작할 시점에 대해 winservice에 신속하게 알릴 필요가 있습니다. –
Message Queue가 아마도 가장 강력한 솔루션이라는 데 동의합니다. 서비스는 대기열에서들을 수 있으며 메시지가 나타나면 바로 당겨 처리 할 수 있습니다. 이것은 비동기 적으로 수행 될 수 있습니다. 웹 응용 프로그램의 유일한 의무는 쉽게 대기열에 메시지를 입금하는 것입니다. –
내 웹 응용 프로그램 (클라이언트)이있는 서버 또는 내 winservice (서버)가있는 서버에서 Message Queue를 호스팅해야하는 서버는 무엇입니까? –