0

wcf-libを作成しますが、プロセス間通信が必要です。libを使用しているアプリを開くと、お互いにアナウンスします。UdpAnnouncementEndpointを使用しますが、機能します。ただし、イントラネットからアナウンスを受け取ります。私に何ができる ?

そして私はこのようなコードでエンドポイントを作成します:

    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アドレスに基づいてコードロジックを使用して推測できると思います)。

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 に答える