Do czego służy folder App_Data używany w programie Visual Studio?

156

Podczas tworzenia nowej aplikacji ASP.NET w programie Visual Studio kilka plików i folderów jest tworzonych automatycznie. Jeden z tych folderów ma nazwę App_Data.

Również podczas publikowania strony internetowej po wybraniu opcji menu dostępne Build->Publishjest pole wyboru Include files from the App_Data folder.

Czy mam rację, zakładając, że pliki umieszczone w tym pliku i jego podfoldery nie będą dostępne w sieci? Na przykład, czy bezpiecznie byłoby umieścić w tym folderze zasoby, których mam zamiar używać tylko przez kod aplikacji?

Jakie jest rzeczywiste przeznaczenie App_Datafolderu?

EDYTOWAĆ:

Dziękuję za wszystkie odpowiedzi. Z dotychczasowych odpowiedzi interesują mnie przede wszystkim dwa wymienione punkty:

  1. App_Data jest zasadniczo punktem przechowywania dla magazynu danych opartego na plikach
  2. Nie powinien być widoczny w sieci i jest miejscem, w którym aplikacja internetowa może przechowywać i odczytywać dane

Czy ktoś mógłby określić, w jaki sposób zapewniona jest „niewidoczność w sieci”? Czy mogę polegać na tym fakcie podczas wykonywania standardowego wdrożenia, czy też muszę sprawdzić niektóre ustawienia usług IIS na serwerze.

W sytuacji gdy mam zestaw plików pdf, do których chcę mieć dostęp tylko z poziomu aplikacji. Czy folder App_Data byłby właściwym miejscem do użycia, czy też powinienem utworzyć oddzielny folder i ręcznie ustawić usługi IIS, aby upewnić się, że nie jest dostępny w sieci Web?

padn
źródło

Odpowiedzi:

119

App_Data jest zasadniczo punktem przechowywania dla magazynów danych opartych na plikach (w przeciwieństwie na przykład do magazynu bazy danych serwera SQL). Niektóre proste witryny używają go na przykład do treści przechowywanych w formacie XML, zazwyczaj tam, gdzie opłaty za hosting bazy danych są drogie.

annakata
źródło
8
Dzięki annakata za tę odpowiedź. Myślę, że ważną kwestią do dodania jest to, że zawartość App_Data domyślnie nie jest widoczna w sieci, jak wspomniał JaredPar. a także, jak skomentowałeś, „to zachowanie można zmodyfikować z * .config httphandlers”
padn,
Czy folder app_data zawiera odniesienia do lokalnych usług internetowych? Moja aplikacja internetowa działa dobrze w .net F5 run. Ale usługi sieciowe nie działają po spakowaniu i wdrożeniu w ISS ... :(
bonCodigo
1
Ten folder jest również używany do przechowywania plików lokalnej bazy danych.
Andrei Khotko
1
Jedną rzeczą, o której nie wspomniano, jest to, że IIS ponownie uruchamia proces sieci Web po zmianie pliku, ale App_Data jest z tego wykluczony!
Peter
43

w usługach IIS podświetl komputer, kliknij dwukrotnie „Filtrowanie żądań”, otwórz kartę „Ukryte segmenty”. „App_Data” jest tam wymieniony jako folder z ograniczeniami. Tak, wiem, że ten wątek jest naprawdę stary, ale nadal obowiązuje.

rakiety są szybkie
źródło
25

Zamierzonym zastosowaniem App_data jest przechowywanie danych aplikacji w celu uzyskania dostępu do procesu internetowego. Nie powinien być widoczny w sieci i jest miejscem, w którym aplikacja internetowa może przechowywać i odczytywać dane.

JaredPar
źródło
7
Nie tylko „nie powinno”, nic w tym folderze jest blokowane przed udostępnieniem przez ASP.NET
John Sheehan
@John, miałem wrażenie, że istnieją sposoby na „zmianę” tego zachowania. Tak, zdecydowanie złe, ale nie wiem, jak często to jest, czy nie
JaredPar
W jaki sposób osiągnięto „niewidoczny”? Czy folder App_data miałby określone ustawienia w usługach IIS?
padn
@padn, nie jestem w 100% pewien co do stosu, ale jest on albo w specjalnej wielkości w IIS, albo w stosie Asp.Net. msdn.microsoft.com/en-us/library/ex526337.aspx
JaredPar
2
iirc to zachowanie można zmodyfikować z * .config httphandlers
annakata
15

To miejsce na umieszczenie wbudowanej bazy danych, takiej jak Sql Server Express, Access lub SQLite.

Shawn
źródło
1
Lub wszelkie inne dane, których witryna może używać, na przykład pliki XML (takie jak lista stanów / krajów / itp.)
John Sheehan,
1
Czy baza danych jest tylko wtedy? Czy mogę umieścić w nim np. Pliki pdf, do których chcę mieć dostęp tylko w kodzie, np. Używając metody Response.TransmitFile?
padn
5
cokolwiek - pojęcie danych nie określa typu ani formatu pliku
annakata
13

Folder App_Data to folder, w którym proces roboczy asp.net ma również prawa do systemu plików, ale nie jest publikowany za pośrednictwem serwera sieci Web.

Na przykład używamy go do aktualizacji lokalnego pliku CSV formularza kontaktowego . Jeśli preferowana metoda wiadomości e-mail nie powiedzie się lub wymagane jest zapytanie źródła danych, pliki App_Data są dostępne.

Nie jest to idealne rozwiązanie, ale to dobry odwrót.

Ed Blackburn
źródło
10

Z dokumentacji dotyczącej struktury folderów projektu sieci Web ASP.NET w witrynie MSDN:

Możesz przechowywać pliki projektu sieci Web w dowolnej strukturze folderów, która jest wygodna dla aplikacji. Aby ułatwić pracę z aplikacją, ASP.NET rezerwuje określone nazwy plików i folderów, których można używać dla określonych typów zawartości.

App_Data zawiera pliki danych aplikacji, w tym pliki bazy danych .mdf, pliki XML i inne pliki magazynów danych. Folder App_Data jest używany przez program ASP.NET do przechowywania lokalnej bazy danych aplikacji, takiej jak baza danych do obsługi członkostwa i informacji o rolach. Aby uzyskać więcej informacji, zobacz Wprowadzenie do członkostwa i zrozumienie zarządzania rolami .

eKek0
źródło
7

Głównym celem jest przechowywanie plików bazy danych aplikacji w formacie.

I nie, domyślnie nie będzie to dostępne w sieci.

Martin Brown
źródło
7

Używamy go jako tymczasowego miejsca przechowywania przesłanych plików CSV. Po załadowaniu metoda Ajax przetwarza i usuwa plik.

dziąsła
źródło
6

Przeznaczeniem App_Data jest przechowywanie pliku związanego z bazą danych. Zwykle pliki mdf programu SQL Server Express.

WebMatrix
źródło