2014-04-23 2 views
0

WCF 비누 웹 서비스가 시작됩니다. 유연한 핫 플러그 ​​기능을 갖춘 상호 운용 가능한 웹 서비스를 구현하려고합니다.WCF가 웹 서비스 및 네트워크 아키텍처를 사용합니다.

장치는 서버에 등록하는 것을 의미하는 서버 서비스 (미리 정의 된 IP 주소)를 소비 한 다음 서비스 요청 장치가 장치의 모든 구성 정보를 반환합니다. 서비스는 나중에 등록 된 장치를 원격으로 제어합니다.

네트워크 아키텍처

아래 그림을 참조하십시오. 서버 측 서비스가 80 포트에서 수신 대기 중입니다. 우리는 서버에 연결하는 라우터 (라우터 B)를 가지고 NAT 테이블 220.120.20.209:80 매핑을 192.168.0.3:80으로 설정했습니다. 220.120.20.209는 공용 IP입니다.

두 개의 클라이언트가 라우터 (라우터 A)에 연결하고 상대적으로 개인 IP 주소 (170.15.40.1/170.15.40.2)를가집니다. 클라이언트는 80 포트에서 수신 대기하는 서비스 (DeviceService)를 호스팅합니다. 그리고 라우터 A에 NAT를 설정하지 않았습니다. 68.250.250.1은 공개 IP입니다.

  1. 는 (요청, 등록) 클라이언트가 송신 조작 (요청) 서비스에 대한 메시지.
  2. (응답) 서비스가 메시지에 응답합니다.
  3. (장치에서 구성 가져 오기) 서비스는 http : // clientsIP : 80/DeviceService와 같은 호출을 통해 클라이언트를 사용합니다.

작동 1, 2가 저에게 작동 중입니다. 나의 이해를 위해, 클라이언트 # 1의 들어오는 IP 주소는 68.250.250.1입니다. (발신자의 주소를 얻으려면) RemoteEndpointMessageProperty를 사용하고 있습니다.

제 질문은 "작업 3이 작동하지 않습니다"입니다. 서버는 라우터/방화벽으로 인해 클라이언트의 개인 IP에 액세스 할 수 없습니다. 서버는 68.250.250.1 만 얻었습니다. 이런 종류의 문제를 어떻게 해결할 수 있습니까? 문제는 네트워크 아키텍처와 관련이 있습니까?

저는 하루 종일 인터넷 검색을 통해 내 문제와 관련이없는 것으로 나타났습니다. 그러나 나는 websocket 것을 발견했다. Websocket은 Tcp를 통해 전이중 통신이 가능합니다. 이는 클라이언트가 서버와의 연결을 구축하고 나면 네트워크 아키텍처 하에서도 서버가 작업 3 (장치에서 구성 가져 오기)를 언제든지 수행 할 수 있다는 것을 의미합니까?

enter image description here

는 2014년 4월 24일

감사 @vtortola하는 많은 업데이트되었습니다. 이러한 참조를 연구 한 후에도 콜백 세션 중에 클라이언트로부터 자체 호스트 서비스를 호출 할 수 있다면 혼란 스럽습니다.

시도는 처음에 자기 호스트 서비스를해야합니다

  1. 클라이언트 무슨 생각을 정교합니다. 예 : 구성 서비스 제공
  2. 클라이언트가 상호 작용을 먼저 수행하도록하고 클라이언트와 서버간에 양방향 채널을 작성하십시오.
  3. 클라이언트 요청 및 서버 응답. 동시에 서버는 콜백 프로 시저를 트리거합니다.
  4. 기간 요청시 서버 요청 "구성 제공 중"메시지가 채널을 통해 클라이언트에 전달됩니다.

답변

0

라우터 A가 NAT를 수행하는 경우에는 그렇게 작동하지 않습니다. RouterA에는 TCP 80 포트만 있습니다. 클라이언트 # 1로 전달하더라도 클라이언트 # 2는 작동하지 않습니다. 그리고 라우터 IP는 개인 IP 주소이기 때문에 NAT를하고 있다고 가정합니다. 그래서 공용 IP 주소로 변환합니다.

나는 두 가지 개념을 망치고 있다고 생각합니다. NAT (Network Address Translation)는 IP 주소와 관련이 있으며 포트와 아무 관련이 없습니다. NAT를 사용하면 클라이언트 개인 IP 주소를 공인 IP 주소로 변환하여 인터넷에 연결할 수 있습니다. 포트 포워딩은 라우터의 공용 인터페이스에있는 TCP 또는 UDP 포트를 특정 로컬 IP 주소로 매핑 할 수있게 해주는 기술입니다. 라우터 B는 공용 인터페이스를 통해 서버가 인터넷과 통신 할 수 있도록 NAT를 수행하고 인터넷의 호스트가 TCP 80 포트에 액세스하여 서버의 TCP 80 포트에 액세스 할 수 있도록 포트 전달을 수행합니다.

클라이언트가 상호 작용을 수행하게하십시오. 작업 # 3에서 클라이언트는 # 2에서 서버 응답을받은 후 장치 구성을 전송해야합니다.

일부 상호 작용을 유도하기 위해 서버가 필요하면 duplex WCF service을 사용해야합니다. WebSocket은 이중 WCF 바인딩 중 하나입니다. 그러나 다시 채널은 먼저 클라이언트에서 서버로 설정되어야합니다.

관련 문제