2009-05-07 9 views
3

저는 외부 하드웨어와 대화 할 책임이있는 "서버"응용 프로그램을 작성하려고합니다. 응용 프로그램은 클라이언트의 요청을 처리합니다. 클라이언트는 서버에 메시지를 보내고, 서버가 하드웨어를 가지고 작업하는 것으로 바쁘면 새로운 메시지가 나중에 처리 될 큐에 저장됩니다.응용 프로그램 간의 통신 (프로세스 간)?

클라이언트는 요청을 취소 할 수 있어야합니다 (서버의 대기열에있는 경우). 서버 응용 프로그램이 하드웨어로 끝나면 결과를 요청한 클라이언트에게 다시 보낼 수 있어야합니다.

서버 및 클라이언트 응용 프로그램은 동일한 PC에있을 수도 있고 그렇지 않을 수도 있습니다. 모든 개발은 .NET (C#) 2005에서 수행됩니다.

그래서 제 질문은 다음과 같습니다.이 통신 문제를 해결하는 가장 좋은 방법은 무엇입니까?

MSMQ? 비누? WCF? 원격? 다른?

답변

0

는 원격 갈 수있는 가장 좋은 방법입니다. http://en.wikipedia.org/wiki/.NET_Remoting

+1

Remoting은 NetNamedPipeBinding이있는 WCF를 대신 사용합니다! –

+0

나는 리모팅을 할 것이다. Remoting은 나의 필요를 너무 잘 맞는 것처럼 보입니다. .Net 3.0을 사용할 수 있다면 WCF를 선택했을 것입니다.하지만 지금은 옵션이 아닙니다. 앞으로는 마이그레이션을 위해 준비 할 수 있도록 많은 준비를 할 것입니다. (.NET Remoting을 WCF로 마이그레이션 : http://blogs.msdn.com/mattavis/archive/2005/10/10/479280.aspx) – anra

+0

@marc_s, remoting은 죽었을 수도 있지만 VS 2005 (at $는 M $에 따르면)입니다. VS 2008/.NET3.5 또는 향후 2010/.NET4에서 개발할 경우 WCF를 고려해야합니다. 그렇지 않으면 Remoting을 계속 사용하는 것이 좋습니다 ... – Mugunth

0

MSMQ는 보안 및 배포 고려 사항이 있지만 의미가 있습니다. 서비스 버스 (예 : NServiceBus 또는 MassTransit)를 볼 수 있으며 도움이 될 수있는 SQL Server Service Broker도 있습니다 (또한 서비스 버스에서 전송으로 사용할 수도 있음).

WCF는 네트워크를 통한 전송이므로 실제로는 서버 대기열에 메시지를 넣으려는 WCF 호출이 필요할 것입니다.

나는 remoting을 권장하지 않는다. 왜냐하면 관심사의 분리를 유지하는 것이 어렵고, 알지도 못하기 전에 그것을 실제로 깨닫지 않고 실제로 수다스러운 인터페이스를 개발하고 있기 때문이다. 원격 호출은 상대적으로 비싸므로 메시지를 상당히 거칠게 유지해야합니다. WCF가 나의 추천 일 것입니다. HTTP 전송을 사용하도록 설정하고 많은 배포 및 보안 문제를 피할 수 있기 때문에 최소한입니다. 모든 개발은 .NET 2005 년에 수행 된 경우

Remoting에

0

.NET Framework는 특정 수준의 전문 지식과 유연성을 염두에두고 설계된 여러 응용 프로그램 도메인의 개체와 통신하는 여러 가지 방법을 제공합니다. 예를 들어 XML 웹 서비스는 XML을 사용하는 HTTP 프로토콜 및 SOAP 형식의 공용 인프라를 기반으로 구축되기 때문에 인터넷의 성장으로 XML 웹 서비스가 매력적인 방법이되었습니다. 이는 공개 표준이며 추가 프록시 또는 방화벽 문제를 염려하지 않고 현재 웹 인프라와 즉시 사용할 수 있습니다.

HTTP 연결을 통해 SOAP 직렬화를 사용하는 것과 관련된 성능 문제로 인해 일부 양식의 XML 웹 서비스를 사용하여 모든 응용 프로그램을 빌드해야하는 것은 아닙니다.

Choosing Communication Options in .NET은 응용 프로그램에 필요한 개체 간 통신의 형식을 결정하는 데 도움이됩니다.

1

클라이언트와 서버 프로세스가 동일한 시스템에 있으면 명명 된 파이프가 가장 빠른 원시 바이트 전송 속도를 제공한다고 생각합니다. 프로세스가 다른 시스템에 있다면 소켓 기반 접근 방식을 사용해야합니다.

원격 처리가 매우 느린 것으로보고되었습니다. 솔루션을 배포하려는 대상 OS에 따라 WCF et.all과 같은 옵션을 사용할 수 있습니다. 그러나 이러한 프로토콜의 오버 헤드는 결정하는 동안 살펴볼 수 있습니다.

2

.NET 3.0 이상을 사용할 수 있다고 가정하면 WCF를 통신 채널로 사용할 수 있습니다. 인터페이스는 일관되지만 클라이언트와 서버가 관련되는 위치에 따라 적절한 전송 메커니즘을 사용할 수 있습니다. 서로 - 그래서 당신은 SOAP 또는 MSMQ 또는 이진 형식 또는 다른 적절한 사용하도록 선택할 수 있습니다 (필요에 따라 자신의 롤 수 있습니다). 또한 양방향 의사 소통의 필요성도 다루고 있습니다.

서버에서 메시지를 대기열에 넣는 것은 별도의 문제로 간주되어야합니다. 특히 대기중인 메시지를 제거해야 할 필요가있는 경우에는 더욱 그렇습니다.

+0

기계 간 프로세스 통신을 위해 NetNamedPipe를 사용하십시오 - 최선의 선택입니다! –