Как получить рабочий путь приложения wcf?



Я хочу получить рабочую папку приложения WCF. Как я могу его получить?



Если я попробую



HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath)


Я получаю исключение нулевой ссылки (Http.Текущий объект-null).





что я имел в виду с рабочей папкой была папка, где работает моя служба WCF. Если я установил aspNetCompatibilityEnabled="true", Я получаю эту ошибку:




сервер не дал содержательного ответа; это может быть вызвано несоответствием контракта, преждевременным сеансом завершение работы или внутренняя ошибка сервера.


538   7  

7 ответов:

Мне нужна была та же информация для моего iis6 размещенного приложения WCF, и я обнаружил, что это работает для меня:

string apPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;

Как всегда, YMMV.

пожалуйста, смотрите ответ ongle ниже. Это намного лучше, чем этот.

обновлена после получения дополнительной информации

следующее работало для меня. Я протестировал его с новой службой WCF, которую я разместил на IIS через Service1.ВПВ.

  1. добавить <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> в web config. <system.serviceModel>..</ ..> уже существовал.
  2. добавить AspNetCompatibilityRequirementsAttribute к службе с разрешенным режимом.
  3. использовать 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");

более общий, я использую этот

AppDomain.CurrentDomain.BaseDirectory

aspNetCompatibilityEnabled= "true" должен был решить мою проблему, но я получил эту ошибку:

сервер не предоставил значимого ответа; это может быть вызвано несоответствием контракта, преждевременным завершением сеанса или внутренней ошибкой сервера.

Я решил свою проблему с получением физического пути моей запущенной службы WCF, получив его из моего текущего домена приложения:

AppDomain.CurrentDomain.BaseDirectory

для ссылки ASP.NET такие функции, как объект HttpContext, необходимо запустить приложение WCF в ASP.NET режим совместимости. Это статьи объясняет как это делать.

Используйте HostingEnvironment.ApplicationPhysicalPath в WCF для поиска физического пути приложения. Использовать пространство имен использование системы.Сеть.Хостинг;

Comments

    Ничего не найдено.