2012-06-27 1 views
0

저는 wcf-lib를 만듭니다. 프로세스 간 통신이 필요합니다. lib를 사용하는 앱을 열면 서로를 알립니다. UdpAnnouncementEndpoint를 사용합니다. 인트라넷에서 공지 사항을 받게됩니다. 무엇을 할 수 있습니까?WCF : AnnouncementService를 설정하는 방법은 localhost on/off 행 메시지 만받습니다.

private void ActionInitClientService() 
    { 
     // Create ClientSelt ServiceHost 
     _clientServiceHost = new ServiceHost(_clientInstance); 
     _clientServiceHost.AddServiceEndpoint((typeof (IClientService)), new NetNamedPipeBinding(), Info.Address); 

     // Make the client discoverable via Udp 
     // and Broadcast itself to Online announcement 
     _clientServiceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint()); 
     var discoveryBehavior = new ServiceDiscoveryBehavior(); 
     discoveryBehavior.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint()); 
     _clientServiceHost.Description.Behaviors.Add(discoveryBehavior); 

     _clientServiceHost.Opened += OnOpenedClientServiceHost; 
     _clientServiceHost.Closed += OnClosedClientServiceHost; 
    } 

를 호스트에 AnnouncementsListener를 추가 :

와 나는 다음과 같은 코드로 엔드 포인트를 작성

private void ActionInitAnnouncementsListener() 
    { 
     var announcementService = new AnnouncementService(); 
     announcementService.OnlineAnnouncementReceived += OnOnlineAnnouncementReceived; 
     announcementService.OfflineAnnouncementReceived += OnOfflineAnnouncementReceived; 

     _announcementsListener = new ServiceHost(announcementService); 
     _announcementsListener.AddServiceEndpoint(new UdpAnnouncementEndpoint()); 
    } 

답변

0

사과드립니다. 코드의 잘못된 부분을보고있었습니다. 클라이언트를 검색 가능하게하기 위해 명명 된 파이프를 사용하지 않습니다.

여기에 들어오는 메시지의 IP 주소를 얻을 수있는 방법입니다 (나는 그 IP 주소를 기반으로 메시지가 인트라넷에서 왔는지 아닌지 추측 할 수 있다고 가정합니다).

OperationContext context = OperationContext.Current; 
MessageProperties messageProperties = context.IncomingMessageProperties; 
RemoteEndpointMessageProperty endpointProperty = messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; 

위의 코드는 다음 링크를 founnd되었습니다 http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/f14520be-d77d-401f-b339-9c58585857f7/

당신의 가나는 http://www.danrigsby.com/blog/index.php/2008/08/20/observableservicehost-an-instancecontext-creation-aware-wcf-servicehost/에 깊이 세부 사항에서 자세한 내용을 찾을 수 있습니다.

+0

Mihai, filter work.and 감사의 범위를위한 속성이 있는지 알고 싶습니다. – GeminiYellow

+0

"발표 범위"의 의미를 정확하게 이해하고 있는지 확신 할 수 없습니다. 조금 설명해 주시겠습니까? –

+0

내가 틀릴 수도 있지만 ... 발표 엔드 포인트뿐만 아니라 모든 서비스 엔드 포인트에 검색 동작을 적용하십시오. 이것이 엔드 포인트에 대한 | 위를 제공해야합니다 (엔드 포인트가 사용자가 찾고있는 경우). 또한 다음 링크를 확인하십시오. http://msdn.microsoft.com/en-us/magazine/ee335779.aspx –

0

없음이되지 않습니다. 클라이언트와 서비스가 동일한 컴퓨터에서 실행될 때만 유효한 NetNamedPipeBinding을 사용하고 있습니다. NetNamePipeBinding은 온 - 머신 통신에 최적화 된 안전하고 신뢰성있는 바인딩을 제공합니다.

+0

네, NetNamedPipeBinding을 사용하고 있습니다.하지만 잘 작동합니다.하지만 내 걱정은 AnnouncementService가 불필요한 message.i를 가져 왔는지 여부는 로컬 호스트 또는 LAN에있는 다른 PC의 온라인 메시지를 확인해야합니다. – GeminiYellow