Есть две проблемы, с которыми я столкнулся прошлой ночью, которые я решил сейчас, но я не уверен на 100%, почему то, что я сделал, решило их, и я надеялся, что, может быть, кто-то мог бы дать некоторое представление, поскольку я переворачивал много камней, и мне не повезло!
Первая проблема
Первая проблема заключается в том, что у меня было два канала с уникальными именами, которые находились в двух отдельных программах:
Однако вторая запускаемая программа выдаст исключение (. Я полагаю, что это было 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();
Мы будем очень признательны за любую информацию.как я уже сказал, я решил проблему и просто хочу знать, почему мое решение сработало, но если вы видите ошибку в том, как я ее решил, и можете предложить лучший способ сделать это, сделайте это:)