Сервисы могут использовать значения BaseAddress (включая номера портов, если запущена служба общего доступа к портам Net.Tcp). Это адреса конечных точек, которые должны быть уникальными. Обратите внимание, что в вашем конфигурационном файле конечные точки MEX для каждого ServiceHost имеют адрес «mex». Ваши другие конечные точки имеют адрес пустой строки. Когда вы предоставляете относительный адрес для конечной точки WCF (по крайней мере, в файле конфигурации), базовый адрес добавляется к нему. Поэтому адрес конечной точки MEX для службы LogReader: «net.tcp: // localhost: 8731 / Design_Time_Addresses / SamAlyza / LogReader / mex».
Поскольку относительный адрес не был задан в основной конечной точке службы, базовый адрес ServiceHost используется в качестве фактического адреса для основной конечной точки службы. Поскольку никакие две конечные точки не могут иметь перекрывающиеся значения Uri.AbsolutePath, ваш пример заставит вас поверить, что значения базового адреса не могут быть общими. Класс ServiceHost, в котором размещаются службы WCF, не имеет встроенной конечной точки, тогда как класс ServiceEndpoint имеет свойство ListenUri, которое будет заполняться на основе предоставленных вами настроек.
Если вы измените значения baseAddress в вашем примере на все совпадения, при условии, что вы установили уникальные относительные значения адресов для элементов Endpoint, все должно работать. Тем не менее, кажется, что вы можете столкнуться с некоторыми проблемами с конечными точками MEX, так как все они в настоящее время имеют адрес «mex». Сделайте это уникальным, и у вас все будет хорошо.
Теперь, я должен спросить, вы уверены, что вы не просто хотите, чтобы эти службы разделяли пространство имен, а не базовые адреса?