0

我创建了一个 wcf-lib,我只想要一个进程间通信。当我打开一个使用lib的应用程序时,会互相宣布。我使用 UdpAnnouncementEndpoint,它可以工作。但它会收到来自 Intranet 的通知。我能做些什么 ?

我通过这样的代码创建端点:

    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());
    }
4

2 回答 2

0

不,它不会。您使用的 NetNamedPipeBinding 仅在客户端和服务都在同一台机器上运行时才有效。根据其定义,NetNamePipeBinding 提供了一种安全可靠的绑定,该绑定针对机器上的通信进行了优化。

于 2012-06-27T17:49:46.557 回答
0

抱歉,我查看了您代码的错误部分。您没有使用命名管道来使您的客户端可被发现。

这是您如何获取传入消息的 IP 地址的方法(我假设基于该 IP 地址,您可以使用一些代码逻辑推断您的消息是否来自您的 Intranet)。

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

上述代码位于以下链接: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/上找到更多详细信息。

于 2012-06-28T07:45:16.827 回答