Не удается прослушать имя канала 'net.pipe: // localhost / OurCompanyName /', поскольку другая конечная точка канала уже прослушивает это имя - PullRequest
0 голосов
/ 20 февраля 2019

Мы используем ServiceHost уже многие годы для локальной связи между нашими приложениями.Мы открываем net.pipe: net.pipe://localhost/OurCompanyName/

Это работало хорошо, пока не появился патч для Windows 10 KB4480966 .

Это код, которыйоткрывает хост службы:

NetNamedPipeBinding binding = new NetNamedPipeBinding();
binding.MaxConnections = 100;
binding.MaxReceivedMessageSize = int.MaxValue;
binding.Security.Mode = NetNamedPipeSecurityMode.Transport;
binding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;
//binding.ReceiveTimeout = new TimeSpan(0, 0, 10, 0);                     

this.serviceHost = new ServiceHost(typeof(LocalService), new Uri[] { new Uri(hostBaseAddress) });
this.serviceHost.AddServiceEndpoint(typeof(ILocalService), binding, localServiceEndPointAddress);

foreach (ServiceEndpoint ep in this.serviceHost.Description.Endpoints)
{
    foreach (OperationDescription op in ep.Contract.Operations)
    {
        DataContractSerializerOperationBehavior dataContractBehavior =
           op.Behaviors.Find<DataContractSerializerOperationBehavior>()
                as DataContractSerializerOperationBehavior;
        if (dataContractBehavior != null)
        {
            dataContractBehavior.MaxItemsInObjectGraph = int.MaxValue;
        }
    }
}

this.serviceHost.Open();

Поскольку упомянутый патч мы получаем это исключение:

Невозможно прослушать имя канала 'net.pipe: // localhost / OurCompanyName /', потому чтодругая конечная точка канала уже прослушивает это имя.

...