2014-09-19 2 views
0

Повышение конфигурации WCFконфигурации WCF повышение

фона:

В app.config или web.config можно определить запись конфигурации в:

<appSettings>...</appSettings> 

следующим образом:

<add key="MyKey" value="%SomeEnvironmentVariable%"/> 

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

string raw = ConfigurationManager.AppSettings[“MyKey”]; 

string cooked = (raw == null) ? null : Environment.ExpandEnvironmentVariables(raw); 

Вопрос:

Есть ли способ сделать то же самое с конфигурацией WCF службы, например:

<system.serviceModel> 
    . . . 
    <services> 
     <service name="..." ...> 
      . . . 
      <endpoint 
       address="%MyEndPointAddress%" ... /> 
      . . . 
     </service> 
    </services> 
</system.serviceModel> 

Любые знания будут высоко оценены.

--Avi

ответ

1

Чтобы изменить адрес конечной точки вам нужно будет знать EndPointName и ContractName. Эти значения находятся в вашем файле конфигурации внутри конфигурации WCF. Затем вы можете использовать следующий код:

void SetNewEndpointAddress(string endpointName, string contractName, string newValue) 
    { 
     bool settingsFound = false; 
     Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     ClientSection section = config.GetSection("system.serviceModel/client") as ClientSection; 
     foreach (ChannelEndpointElement ep in section.Endpoints) 
     { 
      if (ep.Name == endpointName && ep.Contract == contractName) 
      { 
       settingsFound = true; 
       ep.Address = new Uri(newValue); 
       config.Save(ConfigurationSaveMode.Full); 
      } 
     } 
     if (!settingsFound) 
     { 
      throw new Exception(string.Format("Settings for Endpoint '{0}' and Contract '{1}' was not found!", endpointName, contractName)); 
     } 
    } 

Счастливое кодирование!

+0

Спасибо, что это выглядит хорошо – user1497197

Смежные вопросы