Jak uzyskać ścieżkę roboczą aplikacji wcf?
Chcę uzyskać folder roboczy aplikacji WCF. Jak mogę go zdobyć?
If I try
HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath)
Otrzymuję wyjątek null reference (Http.Bieżący obiekt jest null).
Miałem na myśli folder roboczy, w którym działa moja usługa WCF. Jeśli ustawiam aspNetCompatibilityEnabled="true"
, dostaję ten błąd:
Serwer nie dostarczył znaczącej odpowiedzi; może to być spowodowane niedopasowaniem umowy, przedwczesnym zamknięciem sesji lub wewnętrznym serwerem błąd.
7 answers
Potrzebowałem tych samych informacji dla mojej aplikacji IIS6 hosted WCF i stwierdziłem, że to działa dla mnie:
string apPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
Jak zawsze, YMMV.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-02 21:49:42
Proszę zobaczyć odpowiedź ongle poniżej. Jest o wiele lepszy niż ten.
Aktualizacja po więcej informacji
Następujące zadziałały dla mnie. Przetestowałem go z nową usługą WCF, którą hostowałem na IIS za pośrednictwem Usługi1.svc.
- dodaj
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
do web config.<system.serviceModel>..</ ..>
istniał już. - dodaj
AspNetCompatibilityRequirementsAttribute
do serwisu z dozwolonym trybem. - użyj
HttpContext.Current.Server.MapPath(".");
, aby uzyskać katalog główny.
Poniżej znajduje się Pełny kod dla klasy usług. Zrobiłem brak zmian w interfejsie IService1.
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
public void DoWork()
{
HttpContext.Current.Server.MapPath(".");
}
}
A poniżej fragment z sieci.config.
<system.serviceModel>
<!-- Added only the one line below -->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<!-- Everything else was left intact -->
<behaviors>
<!-- ... -->
</behaviors>
<services>
<!-- ... -->
</services>
</system.serviceModel>
Stara odpowiedź
Co masz na myśli przez folder roboczy? Usługi WCF mogą być hostowane na kilka różnych sposobów i z różnymi punktami końcowymi, więc folder roboczy jest nieco niejednoznaczny.
Można pobrać normalny "Folder roboczy" wywołaniem do katalogu .GetCurrentDirectory () .
HttpContext jest ASP.Net obiekt. Nawet jeśli WCF może być hostowane na IIS, to nadal nie ASP.Net i z tego powodu większość ASP.Net techniki nie działają domyślnie. OperationContext jest odpowiednikiem WCF dla HttpContext. OperationContext zawiera między innymi informacje o przychodzącym żądaniu, wychodzącej odpowiedzi.
Choć najprostszym sposobem może być uruchomienie usługi w ASP.Net tryb zgodności poprzez włączenie go w sieci.config. To powinno dać ci dostęp do ASP.Net HttpContext. Ograniczy Cię do * HttpBindings i hosting IIS. Aby przełączyć tryb zgodności, dodaj następujące elementy do sieci web.config.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-06 19:58:07
W zależności od tego, czego chcesz. Zazwyczaj chcę rozwiązać adres URL, taki jak "~ / folder / file". To zadziałało.
System.Web.Hosting.HostingEnvironment.MapPath("~/folder/file");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-16 23:17:37
Bardziej ogólnie, używam tego
AppDomain.CurrentDomain.BaseDirectory
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-04 09:24:16
AspNetCompatibilityEnabled = "true" powinien rozwiązać mój problem, ale mam ten błąd:
Serwer nie dostarczył znaczącej odpowiedzi; może to być spowodowane niedopasowaniem umowy, przedwczesnym zamknięciem sesji lub wewnętrznym błędem serwera.
Rozwiązałem problem z uzyskaniem fizycznej ścieżki uruchomionej usługi WCF, pobierając ją z bieżącej domeny aplikacji:
AppDomain.CurrentDomain.BaseDirectory
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-28 10:24:13
W celu odniesienia ASP.NET funkcje takie jak obiekt HttpContext, musisz uruchomić aplikację WCF w ASP.NET tryb zgodności. Ten Artykuł wyjaśnia, jak to zrobić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-26 19:52:41
Użyj Środowiska Hostingowego.ApplicationPhysicalPath in WCF to find your application physical path. Użyj przestrzeni nazw korzystanie z systemu.Www.Hosting;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-09 09:00:39