2012-04-19 3 views
2

여러 클라이언트 (winforms 앱)가 인터넷을 통해 원격 위치에서 서버에 연결하고 이중 통신을 시작하여 교통량이 많이 든다.WCF (또는 다른 솔루션)로 이중 통신을 보호하는 최선의 방법

현재 우리는 WCF로 netTcpBinding을 통해 이중 통신을 사용하고 있으며, 우리 자신의 인증서로 전송 계층을 통해 보안을 유지합니다. 이 작동하지만, 나는 사물의 수에 대한 걱정 :

  • 그 설정에 고통 - 각 클라이언트가 서버를 식별하고, 각 클라이언트의 인증서를 등록해야하는 우리가 인증서를 생성 클라이언트 컴퓨터와 서버
  • 특정 포트에서 tcp를 사용하기 때문에 tcp를 통해 통신을 시작할 수 있도록 클라이언트 측에서 열려있는 부분에 의존합니다. 일부 고객 지역에서는이 점을 좋아하지 않습니다.
  • 우리는 각 클라이언트가 자신을 식별하는 식별자의 일종을 보내 대안으로 전달 이상적으로

을 보장 할 수 있도록, 내가 고정하고있는 단일 SSL 인증서, wsDualHttpBinding를 사용하는 방법에 대해 궁금 필요 . 이것은 방화벽 문제의 문제를 해결할 것이며, tcp 대신 http를 통해 충분히 성능이 향상 될 것입니까? 내가 WCF가 http를 사용한다면 WCF는 2 채널을 생성 할 것이라는 것을 알고 있습니다. (HTTP는 양방향 통신을 지원하지 않으므로) 성능과 관련하여 몇 가지 문제를 일으킬 수있는 것처럼 들립니다.

제 질문은, 이 솔루션이 더 좋습니까? 또는이 문제를 쉽게 해결할 수있는 다른 솔루션 (예 : NServiceBus)이 있습니까? This binding requires that the client has a public URI that provides a callback endpoint for the service : 나는 이후 wsDualHttpBinding 나 때문에위한 옵션이 아니라는 것을 배웠다

편집 할 수 있습니다. 이것은 나를 위해 불가능합니다.

+0

netTcpBinding 서비스에서 프로젝트를 계속했거나 다른 WCF 솔루션으로 변경 했습니까? 클라이언트 컴퓨터에 데스크톱 응용 프로그램이 있고 인터넷을 통해 서로 묶여 있어야하는 서버의 서비스가 있습니다. – Hamid

답변

6

나 개별적으로 각각의 문제를 해결하자

  1. TransportWithMessageCredential을 사용하여 사용자 이름과 암호를 사용하지 왜 - 클라이언트에서 당신은 단지 사용자 이름을 관리 할 필요가 의미 암호를하고 클라이언트 인증서 문제가 사라집니다 서버를 NetTcpBinding와

  2. 인바운드 트래픽에 대한 포트를 열 필요 - 클라이언트는 클라이언트가 포트에 연결할 수 있도록해야합니다, 그들은는 내가 허용 할 필요가 없습니다 특정 포트에서 의 Nbound 연결 사용자 지정 포트에 아웃 바운드 연결을 허용하는 데 문제가 있습니까?

  3. NetTcpBinding은 이 아닌 것으로 가정하고 전달을 보장하는 Tcp를 사용합니다. 토폴로지에 SOAP 중개자가 없습니다. 보장 배달 또는 처리를 시도하고 있습니까?

WSDualHttpBinding은 인바운드 연결 포트를 열고 클라이언트를 강제로 이렇게 거의 확실하게 허용되지 않습니다.나는 이슈를 명확히하는 데 도움이 될 수있는 듀플렉스에 대해 blog article을 썼다.

SignalR을보고 싶을 수도있다.이 유형의 시나리오를 위해 디자인되었지만 웹 애플리케이션 용으로 설계된 .NET 클라이언트도있다.

+0

대단히 감사드립니다. 나는 cert 문제가 서툴러서 TransportWithMessageCredential을 사용하는 것이 합리적이라는 데 동의한다. 나는 netTcpBinding이 배달을 보장한다는 것을 몰랐다. 그것은 고무적이다. –

+0

WRT에서 SignalR 사용하기 - 2-way 통신에 대한 청구서에 부합한다는 것을 알았지 만, .net 클라이언트 응용 프로그램의 작동 방식을 잘 모르겠습니다. 웹 응용 프로그램의 경우 웹 소켓을 사용하여 긴 폴링으로 되돌아갑니다. 하지만 그것은 .net 클라이언트 응용 프로그램을 위해 무엇을 사용합니까 - 단지 http입니까? –

+0

명백한 (즉, TransortWithMessageCredential 사용) 코드를 사용하면 코드를 간소화하고 인증서에 대한 종속성을 제거 할 수있었습니다. 다시 한 번 감사드립니다. –

관련 문제