Два уникальных именованных канала конфликтуют и InvalidCredentialException

Есть две проблемы, с которыми я столкнулся прошлой ночью, которые я решил сейчас, но я не уверен на 100%, почему то, что я сделал, решило их, и я надеялся, что, может быть, кто-то мог бы дать некоторое представление, поскольку я переворачивал много камней, и мне не повезло!

Первая проблема

Первая проблема заключается в том, что у меня было два канала с уникальными именами, которые находились в двух отдельных программах:

  • net.pipe ://localhost/superuniquepipe1
  • net.pipe :// localhost/superuniquepipe2

Однако вторая запускаемая программа выдаст исключение (. Я полагаю, что это было AddressAlreadyInUseException )при открытии ServiceHost из-за того, что адрес уже используется.

Способ, которым я создавал экземпляры этих ServiceHost, был следующим:

Uri[] baseAddresses = new Uri[] { new Uri("net.pipe://localhost") };
this.host = new ServiceHost(this, baseAddresses);
this.host.AddServiceEndpoint(typeof(IHostType), new NetNamedPipeBinding(), "superuniquepipe1");
this.host.Open();

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

this.host = new ServiceHost(this);
this.host.AddServiceEndpoint(typeof(IHostType), new NetNamedPipeBinding(), "net.pipe://localhost/superuniquepipe2");
this.host.Open();

Правильно ли я говорю, что причина, по которой это сработало, заключается в том, что он проверял только базовые адреса, а не конечную точку, которую я пытался добавить? И является ли использование второго примера кода допустимым/безопасным способом прослушивания нескольких программ на «localhost»?

Вторая проблема.:

В попытке исправить описанное выше я изменил базовый адрес с localhost на ряд различных уникальных строк, например. "net.pipe ://rawrwhyisntthisworkingsadface", но при этом мне будет представлено InvalidCredentialException от клиента, пытающегося установить соединение (, см. ниже код )

. У меня сложилось впечатление, что именованный канал может буквально можно назвать как угодно, может ли кто-нибудь пролить свет на это?

ChannelFactory<IHostType> factory = new ChannelFactory<IHostType>(new NetNamedPipeBinding(), new EndpointAddress("net.pipe://rawrwhyisntthisworkingsadface/superuniquepipe2"));
IHostType proxy = factory.CreateChannel();
proxy.CallSomeMethodAndGetAnException();

Мы будем очень признательны за любую информацию.как я уже сказал, я решил проблему и просто хочу знать, почему мое решение сработало, но если вы видите ошибку в том, как я ее решил, и можете предложить лучший способ сделать это, сделайте это:)

6
задан abatishchev 28 April 2012 в 09:29
поделиться