Вам необходимо иметь эту информацию самостоятельно - сама служба WCF не знает, будет ли она размещена в IIS или самостоятельно. В конце концов, это просто экземпляр ServiceHost
, который каким-то образом раскручивается.
Так что, я думаю, вам понадобятся некоторые настройки, которые вы можете установить в web.config
или app.config
- что-то вроде:
<add key="WCFHost" value="IIS" />
или
<add key="WCFHost" value="CustomApp" />
, а затем оцените это значение и, в зависимости от того, что вы получите, откройте либо WebConfigurationManager, либо просто ConfigurationManager.
Вы можете подумать, что можете проверить наличие HttpContext
: если оно NULL, значит, вы работаете в пользовательском приложении, если оно не NULL, то это веб-сценарий. Но это не работает, так как вы можете разместить службу WCF в IIS (таким образом, у вас будет web.config
для консультации), но без настроек совместимости ASP.NET, в этом случае HttpContext
будет NULL даже если вы используете сценарий веб-хостинга.
Один из вариантов - проверить эту настройку здесь:
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
Он будет содержать полный путь к файлу конфигурации текущего AppDomain - если это веб-приложение, он будет содержать путь + web.config
в конце.
Так что, если вы проверите
if(Path.GetFileName(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile) == "web.config")
вы можете быть уверены, что находитесь в веб-приложении, и у вас есть web.config
для просмотра.