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입니다.
- 는 (요청, 등록) 클라이언트가 송신 조작 (요청) 서비스에 대한 메시지.
- (응답) 서비스가 메시지에 응답합니다.
- (장치에서 구성 가져 오기) 서비스는 http : // clientsIP : 80/DeviceService와 같은 호출을 통해 클라이언트를 사용합니다.
작동 1, 2가 저에게 작동 중입니다. 나의 이해를 위해, 클라이언트 # 1의 들어오는 IP 주소는 68.250.250.1입니다. (발신자의 주소를 얻으려면) RemoteEndpointMessageProperty를 사용하고 있습니다.
제 질문은 "작업 3이 작동하지 않습니다"입니다. 서버는 라우터/방화벽으로 인해 클라이언트의 개인 IP에 액세스 할 수 없습니다. 서버는 68.250.250.1 만 얻었습니다. 이런 종류의 문제를 어떻게 해결할 수 있습니까? 문제는 네트워크 아키텍처와 관련이 있습니까?
저는 하루 종일 인터넷 검색을 통해 내 문제와 관련이없는 것으로 나타났습니다. 그러나 나는 websocket 것을 발견했다. Websocket은 Tcp를 통해 전이중 통신이 가능합니다. 이는 클라이언트가 서버와의 연결을 구축하고 나면 네트워크 아키텍처 하에서도 서버가 작업 3 (장치에서 구성 가져 오기)를 언제든지 수행 할 수 있다는 것을 의미합니까?
는 2014년 4월 24일
감사 @vtortola하는 많은 업데이트되었습니다. 이러한 참조를 연구 한 후에도 콜백 세션 중에 클라이언트로부터 자체 호스트 서비스를 호출 할 수 있다면 혼란 스럽습니다.
시도는 처음에 자기 호스트 서비스를해야합니다
- 클라이언트 무슨 생각을 정교합니다. 예 : 구성 서비스 제공
- 클라이언트가 상호 작용을 먼저 수행하도록하고 클라이언트와 서버간에 양방향 채널을 작성하십시오.
- 클라이언트 요청 및 서버 응답. 동시에 서버는 콜백 프로 시저를 트리거합니다.
- 기간 요청시 서버 요청 "구성 제공 중"메시지가 채널을 통해 클라이언트에 전달됩니다.