测试命名管道绑定是否可用或已在使用中

本文关键字:管道 绑定 是否 测试 | 更新日期: 2023-09-27 18:25:01

我有一个简单的WCF服务,用于我们应用程序中的跨应用程序域通信。

该服务通过NamedPipeBinding公开,目前使用硬编码名称:

var address="net。pipe://localhost/app/log";

        NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
        binding.ReceiveTimeout = TimeSpan.MaxValue;
        binding.
        logServiceHost = new ServiceHost(typeof(LogService));
        logServiceHost.AddServiceEndpoint(typeof(ILogProvider), binding, address);
        logServiceHost.Open();

问题是这个名称是硬编码的,因此我们应用程序的另一个实例无法分配新的命名管道(因为这个名称已经取了)。

是否可以检查是否已经取了一个名称,如果可以,请分配一个不同的名称?

或者还有其他更容易的策略来处理这种情况吗?

测试命名管道绑定是否可用或已在使用中

您基本上是在尝试实现"多实例感知"服务。这样做的典型方法是允许每个服务实例宣布其存在。最好的方法是使用添加一个公告端点:

var discoveryBehavior = new ServiceDiscoveryBehavior();
discoveryBehavior.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint());
logServiceHost.Description.Behaviors.Add(discoveryBehavior);
logServiceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());
logServiceHost.Open();

稍后,您可以发现网络中现有服务的每个实例,并在必要时采取必要的步骤来防止端点URI冲突。

您可以通过链接阅读有关WCF自动发现行为的更多信息。