Как получить рабочий путь приложения wcf?
Я хочу получить рабочую папку приложения WCF. Как я могу его получить?
Если я попробую
HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath)
Я получаю исключение нулевой ссылки (Http.Текущий объект-null).
что я имел в виду с рабочей папкой была папка, где работает моя служба WCF. Если я установил aspNetCompatibilityEnabled="true", Я получаю эту ошибку:
сервер не дал содержательного ответа; это может быть вызвано несоответствием контракта, преждевременным сеансом завершение работы или внутренняя ошибка сервера.
7 ответов:
Мне нужна была та же информация для моего iis6 размещенного приложения WCF, и я обнаружил, что это работает для меня:
string apPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;Как всегда, YMMV.
пожалуйста, смотрите ответ ongle ниже. Это намного лучше, чем этот.
обновлена после получения дополнительной информации
следующее работало для меня. Я протестировал его с новой службой WCF, которую я разместил на IIS через Service1.ВПВ.
- добавить
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>в web config.<system.serviceModel>..</ ..>уже существовал.- добавить
AspNetCompatibilityRequirementsAttributeк службе с разрешенным режимом.- использовать
HttpContext.Current.Server.MapPath(".");получить root справочник.Ниже приведен полный код для класса обслуживания. Я не внес никаких изменений в интерфейс IService1.
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)] public class Service1 : IService1 { public void DoWork() { HttpContext.Current.Server.MapPath("."); } }а ниже приведен отрывок из интернета.конфиг.
<system.serviceModel> <!-- Added only the one line below --> <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> <!-- Everything else was left intact --> <behaviors> <!-- ... --> </behaviors> <services> <!-- ... --> </services> </system.serviceModel>ответ
что вы подразумеваете под рабочей папкой? Службы WCF могут размещаться несколькими различными способами и с разными конечными точками, поэтому рабочая папка немного неоднозначна.
вы можете получить нормальную " работу папка " с вызовом .GetCurrentDirectory().
HttpContext является ASP.Net объект. Даже если WCF может быть размещен на IIS, это все еще не так ASP.Net и по этой причине большинство из них ASP.Net методы не работают по умолчанию. OperationContext эквивалентно системе WCF в свойство HttpContext. OperationContext содержит информацию о входящем запросе, исходящий ответ среди прочего.
хотя самый простой способ может быть, чтобы запустить службу в ASP.Net режим совместимости путем переключения его в интернете.конфиг. Это должно дать вам доступ к ASP.Net HttpContext. Это будет ограничивать вас в *HttpBindings и IIS, хотя таких. Чтобы переключить режим совместимости, добавьте в сеть следующее.конфиг.
<system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> </system.serviceModel>
в зависимости от того, что вы хотите. Обычно я хочу разрешить url-адрес, например "~ / folder / file". Вот что сработало.
System.Web.Hosting.HostingEnvironment.MapPath("~/folder/file");
aspNetCompatibilityEnabled= "true" должен был решить мою проблему, но я получил эту ошибку:
сервер не предоставил значимого ответа; это может быть вызвано несоответствием контракта, преждевременным завершением сеанса или внутренней ошибкой сервера.
Я решил свою проблему с получением физического пути моей запущенной службы WCF, получив его из моего текущего домена приложения:
AppDomain.CurrentDomain.BaseDirectory
для ссылки ASP.NET такие функции, как объект HttpContext, необходимо запустить приложение WCF в ASP.NET режим совместимости. Это статьи объясняет как это делать.
Используйте HostingEnvironment.ApplicationPhysicalPath в WCF для поиска физического пути приложения. Использовать пространство имен использование системы.Сеть.Хостинг;
Comments