Проверьте, доступна ли привязка именованного канала или уже используется - PullRequest
2 голосов
/ 19 февраля 2012

У меня есть простая служба WCF, которая используется для связи между доменами приложения в нашем приложении.

служба предоставляется через NamedPipeBinding, в настоящее время использующую жестко закодированное имя:

varaddress = "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();

Проблема в том, что это имя жестко запрограммировано, и поэтому другой экземпляр нашего приложения не может выделить новый именованный канал (так как имяуже занят).

Можно ли проверить, занято ли уже имя, и если да, назначить другое имя?

Или есть другие более простые стратегии для обработки такого сценария?

1 Ответ

3 голосов
/ 19 февраля 2012

Вы в основном пытаетесь предоставлять услуги с поддержкой нескольких экземпляров.Типичный подход к этому - позволить каждому экземпляру службы объявить о своем существовании.Лучший способ сделать это - добавить конечную точку объявления:

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

Позже вы сможете обнаружить каждый экземпляр существующих служб в сети и предпринять необходимые шаги для предотвращения коллизий URI конечной точки, если необходимо.1004 *

Подробнее о поведении WCF Auto Discovery можно узнать по ссылке.

...