2010-03-02 2 views
7

localhost에서만 서버 인 Visual Studio 개발 웹 서버 (Cassini) 제한과 비슷하게 localhost에만 필요한 WCF 서비스 구현이 있습니다.LOCALHOST 전용 수신을 위해 WCF 구성

Windows 방화벽이 외부에서 마주하는 NIC에서 수신 대기하도록 프로그램을 허용한다는 메시지가 표시된다는 것을 제외하면 다른 컴퓨터에 액세스 할 수 있습니다. 이것은 내부적으로 만 필요하기 때문에 WCF 서버 측 구성을 제한하여 방화벽 탐지기를 트립하지 않도록합니다.

올바른 해결책은 binding.HostNameComparisonMode = HostNameComparisonMode.Exact입니까? 나는 이것이 어떻게 충분한 지 보지 못한다.

====

처럼 카시니는이 서비스 구현은 독립의 네트워크 통신이 필요합니까 뭔가 다른 것입니다. 클라이언트는 localhost에서 실행중인 실제 서버 또는 가짜 구현에 연결하도록 구성 할 수 있습니다.

답변

0

귀하의 호스팅 방식에 따라 다릅니다. IIS7 또는 WAS에있는 경우 WCF는 IIS의 일치 모드를 사용합니다. 그렇지 않으면 HostNameComparisonMode.Exact을 사용하면 호스트 이름이 항상 일치하는 데 중요한 요소가됩니다. 호스트 이름이 일치하지 않으면 일반적으로 디스패치가 실패합니다.

정확한 것은 100 % 완벽하게 정확한 것은 아니라는 점에 유의해야합니다 ... 호스트 이름에 약간의 변형을 허용합니다. NetBios 호스트 이름과 전체 DNS 이름이 모두있는 경우 WCF는이 둘을 하나로 처리하므로 일치가 계속 발생합니다.

System.ServiceModel.BasicHttpBinding.HostNameComparisonmode

+0

나는 바인딩을 시도했습니다.HostNameComparisonMode = HostNameComparisonMode.Exact 다시 작동하며 작동하지 않습니다. 관련 Windows 방화벽 규칙을 지우면 방화벽에서 다시 허용할지 묻는 메시지를 표시합니다. –

+0

ServiceHost 생성자에 기본 주소로'새로운 Uri ("net.tcp : // localhost")를 추가했습니다. –

+0

글쎄, 방화벽이 루프백 호스트인지 또는 아니. Named Pipes를 사용하는 것 외에 다른 것에 대해 할 수있는 일이 있는지 확실하지 않습니다. – jrista

6

나는 당신이 길을 잘못 접근하고 있다고 생각합니다. 명명 된 파이프 바인딩을 사용해야합니다.이 바인딩은 사용중인 모든 메시지 교환 패턴 (WS가 지원하는 동일한 동시성 및 세션 상태 모드는 물론 요청 - 응답도 지원함)을 지원해야합니다.

이 명명 된 파이프가 Windows 운영 체제 커널의 오브젝트 등이다 명명 된 파이프 전송

를 사용하려면 MSDN의 섹션에서

"Choosing a Transport" (강조 광산)라는 제목의 프로세스가 통신에 사용할 수있는 공유 메모리 섹션으로. A 명명 된 파이프에는 이름이 있으며 단일 시스템에서 단방향 또는 양방향 통신을 위해 을 사용할 수 있습니다.

통신이 에 다른 WCF 응용 프로그램 사이에 하나의 컴퓨터를 필요 , 당신은 원하는 다음 명명 된 파이프를 교통 기관을 이용, 다른 기계에서 모든 통신을 방지 할 수 있습니다. 추가 제한 은 Windows 원격 데스크톱에서 실행중인 프로세스가 권한 상승이 아닌 한 동일한 Windows 원격 데스크톱 세션으로 제한 될 수 있습니다.

이것은 정확한 요구 사항을 충족하며 구성 변경 사항만으로 충분하지 않습니다.

+0

동의; "로컬 호스트 만"은 실제로 "프로세스 간 통신"이며 명명 된 파이프가 가장 좋습니다. – Randolpho

+0

미안 해요 - 분명히하겠습니다 : 카시니와 마찬가지로이 서비스 구현은 네트워크 통신이 필요한 다른 것을위한 스탠드입니다. 클라이언트는 localhost에서 실행중인 실제 서버 또는 가짜 구현에 연결하도록 구성 할 수 있습니다. –

+0

@ Jason : 클라이언트를 구성 할 수있는 경우 Http 끝점 대신 명명 된 끝점 끝점을 사용하도록 구성하지 않으시겠습니까? WCF는 둘 다 가능하고 파이프를 통한 서비스 호출은 WCF와 동일합니다 ... 다른 이유는 무엇입니까? – jrista