У меня есть служба WCF Windows с конечной точкой, указанной в файле конфигурации для службы.
<baseAddresses>
<add baseAddress="net.tcp://localhost:9000/MyEndpoint"/>
</baseAddresses>
Все работает нормально. Однако в некоторых случаях порт 9000 уже может использоваться, что приводит к падению ServiceHost на Open ().
Мне нужно иметь возможность переопределить базовый адрес по умолчанию, указанный в файле конфигурации в коде. например Предположим, переменная среды содержит номер порта, который будет использоваться.
Есть ли способ сделать это программно?
После создания ServiceHost я вижу свойство BaseAddresses, которое возвращает список Uri, взятый из файла конфигурации. Однако это коллекция только для чтения, поэтому ее нельзя использовать для изменения значений по умолчанию.
Если я указываю заменяющий Uri в конструкторе ServiceHost, я получаю
Эта коллекция уже содержит
адрес со схемой net.tcp. Там
может быть не более одного адреса на схему
в этой коллекции. Если ваш сервис
будучи размещенным в IIS, вы можете исправить
проблема с настройкой
'System.serviceModel / serviceHostingEnvironment / multipleSiteBindingsEnabled'
к истине или с указанием
'System.serviceModel / serviceHostingEnvironment / baseAddressPrefixFilters.
Если я создаю CustomServiceHost и пытаюсь установить заменяющий базовый адрес, я получаю ту же ошибку.
class CustomHost : ServiceHost
{
public CustomHost(Type serviceType) : base (serviceType)
{
}
protected override void ApplyConfiguration()
{
base.ApplyConfiguration();
this.AddBaseAddress(new Uri("net.tcp://localhost:9010/MyEndpoint"));
}
}
Я знаю, что если я оставлю базовые адреса файла конфигурации пустыми и передам базовый адрес в конструктор ServiceHost, то это будет работать нормально, то есть я могу указать новые базы. Однако я хочу использовать файл конфигурации, чтобы указать значение по умолчанию (вместо жесткого кодирования).