2012-09-11 3 views
0

들어오는 메시지/연결을 받아들이는 WCF 서비스를 설정하려고합니다.로컬 연결 만 허용하도록 WCF NetTcpBinding을 설정하면 오류가 발생합니다.

은 내가 성공적으로 서비스를 생성하고 실행하고 WCF 끝점을 만들려면이 코드를 사용하여 통신 할 수 있었다 마자이 줄을 추가로

NetTcpBinding binding = new NetTcpBinding(); 
binding.Security.Mode = SecurityMode.None; 
_host = new ServiceHost(this, new Uri("net.tcp://localhost:19852")); 
_host.Description.Behaviors.Add(new ServiceMetadataBehavior()); 
_host.AddServiceEndpoint(typeof(ISyncClient), binding, "SyncService"); 
_host.AddServiceEndpoint(typeof(IMetadataExchange), System.ServiceModel.Description.MetadataExchangeBindings.CreateMexTcpBinding(), "mex"); 
_host.Open(); 

를 (단지 localhost로 제한되지 않음) 이미 있습니다 :

이 System.ServiceModel.AddressAlreadyInUseException

binding.HostNameComparisonMode = HostNameComparisonMode.Exact; 

나는이 예외가 로컬 호스트에서 연결에 제한 IP 끝점 0.0.0.0:19852에있는 수신기. 이는 이미이 엔드 포인트에서 청취중인 다른 어플리케이션이 있거나 동일한 IP 엔드 포인트를 갖고 있지만 호환되지 않는 바인딩 구성을 사용하여 서비스 호스트에 여러 개의 서비스 엔드 포인트가있는 경우 발생할 수 있습니다. ---> System.Net.Sockets.SocketException : 각 소켓 주소 (프로토콜/네트워크 주소/포트)의 한 가지 용도 만 정상적으로 허용됩니다.

제한적인 올바른 방법은 무엇인지 잘 모르겠습니다. WCF 액세스하지만 분명히 작동하지 않습니다. 나에게 이것은 MEX 종점과의 일종의 갈등처럼 보인다. 내가 아는 한 mex 엔드 포인트가 필요하므로 제거 할 수 없습니다. 누구든지 해결책의 방향으로 나를 가리 킵니까?

+0

"수신 메시지/연결 만 허용하는 WCF 서비스 설정"이란 무엇을 의미합니까? 왜 네가 이걸하고 싶어하는지 이해가 안되니? 분명히 메시지를 보내고 싶다면 WCF 채널이 아니라 proc에서 메시지를 보내야합니다. 어쨌든, 해당 포트 번호가 이미 다른 서비스에서 사용되고 있지 않은지 확인 했습니까? – stephenl

+0

@stephenl 내 말은 서비스가 동일한 컴퓨터의 연결 만 받아들이도록하려는 것입니다. –

답변

2

쉬운 방법은 명명 된 파이프 바인딩을 사용하는 것입니다. 로컬 통화 만 지원합니다. Choosing a Transport에서 :

통신이 하나의 컴퓨터에서 다른 WCF 응용 프로그램 사이에 필요한, 그리고 당신이 에서 다른 컴퓨터를 어떤 통신을 방지하고자한다

후 명명 된 파이프 전송을 사용합니다.

또한 Mex 포인트는 완전히 선택 사항입니다. 엔드 포인트와 동작을 문제없이 제거 할 수 있습니다.

+0

WcfTestClient.exe를 사용하여 서비스를 테스트하려했는데 mex 끝 점이 없으면 표시되지 않았습니다. –

+0

또한 명명 된 파이프 바인딩을 사용하면이 응용 프로그램에 대한 옵션이 없습니다. (내 리드) –

+0

왜 그럴까요? 그것이 정확히 무엇을위한 것입니다. Btw, WcfTestClient에는 mex 끝점이 필요합니다 (응용 프로그램과 달리) 구성을 저장할 방법이 없기 때문입니다. – stephenl

관련 문제