Documente Academic
Documente Profesional
Documente Cultură
Cristian Bologa
Obiective
Organizare
Laborator: 418/419/420
Echipa:
Lect. Dr. Cristian Bologa, As. Dr. Alexandru Stan, Drd. Florina Covaci
Medii de dezvoltare
Cerine, evaluare
Prob teoretic: 40% - din care
Examen scris n sesiune: 75%
2 teste scrise la finalul cursurilor: fiecare 12.5%
Testele scrise: materia predata pana la momentul
testului
Bibliografie
handouts la fiecare curs din Microsoft Official Curricula
Orice alt material la dispozitia dvs este potrivit
Cuprins
Managementul memoriei
Gestiunea tranzactiilor
Comunicarea intre procese, multithreading
Si altele
Biblioteca de clase
10
Obiectivele limbajului C#
11
Assembly
2 tipuri de assembly:
program executabil (.exe)
Librarii (.dll): pentru modularizarea dezvoltrii codului si
descompunerea aplicaiei in componente logice (reutilizabilitate)
12
Assembly (II)
Semnatura assembly-ului
14
Executia assemblyurilor
Ruleaz executabilul
CodeManager: incarca executabilul si executa metoda Main
Garbage Collector: elibereaz automat memoria obiectelor care nu
mai sunt utilizate de ctre aplicaie
Exception Manager: furnizeaz gestiunea excepiilor
15
Facilitati de debugging:
Furnizeaz o unealt pentru executie pas-cu-pas, breakpoints,
urmarirea executiei
Gestiunea erorilor
Error List Window -Fereastr de erori, acestea sunt produse pe msura
scrierii codului si la build
17
Template-uri de baz in VS
Console application
WPF application
Class Library
Windows Forms
Application
ASP.NET Web application
ASP.NET MVC 2
Application
Silverlight Application
WCF Service application
18
Solutia VS
19
Clase si namespace-uri
20
21
Comentarea aplicaiilor
22
Documentarea aplicaiilor
23
24
Cristian Bologa
25
26
Aplicatiile WPF
27
Controalele WPF
3 tipuri de controale: individuale, item i layout
Controalele individuale:
Corespund unor controale echivalente din Windows Forms: Button, Label,
TextBox etc.
Au un scop individual in aplicaie
Content controls (controale de continut): afiseaz o varietate de continut
28
Controale Content
29
30
Controlul Button
31
Controlul CheckBox
32
Controlul RadioButton
33
TextBlock
34
Image
35
TextBox
36
ProgressBar
Controlul Slider
38
ComboBox
39
TreeView
40
Menu
Menu
Poate fi pus aproape oriunde in interfata. De obicei este sus, in bara de
meniu
Proprietatea IsMainMenu: cauzeaza ca meniul sa fie considerat meniu
principal al ferestrei. Primeste focus cu tasta Alt sau F10
Contine o lista de controale de tip MenuItem
41
MenuItem
ContextMenu
43
ToolBar
ToolbarTray
Este un container pentru controale de tip Toolbar
Se permite resize/move pentru controalele Toolbar plasate in
ToolbarTray la runtime
44
StatusBar
Similar cu ToolBar
Utilizat pentru a gazdui controale care afiseaz informaie
Label , ProgressBar
45
Proprieti attached
47
Panelul Grid
Controlul GridSplitter
Permite userului sa redimensioneze liniile/coloanele unui
grid la runtime
Trebuie plasat intr-o celul a gridului
Trebuie pozitionat adiacent coltului liniei sau48coloanei sau
UniformGrid
49
StackPanel
50
WrapPanel
51
DockPanel
52
Canvas
<Canvas>
<Button Canvas.Top="20" Canvas.Left="30">Button</Button>
</Canvas>
Alinierea controalelor
Se poate face la designTime cu utilizarea snaplines
54
Folosirea resurselor
55
Resurse binare
56
pack://<Authority>/<Folder>/<FileName>
<Authority> poate fi
Aplication,,, : resursa se afla in assemblyul aplicaiei
siteOfOrigin,,, : resursa trebuie cutat in situl de origine a
aplicaiei
pack://application:,,,/<AssemblyName>;component/<Folder>/<File
Name>
57
Fisiere continut
58
Metoda Application.GetResourceStream
Metoda returneaza un obiect de tipul
System.Windows.Resources.StreamResourceInfo, care are 2
proprieti
ContentType tipul de continut
UnmanagedMemoryStream datele binare (raw) ale resursei
59
60
61
Resurse logice
Putem defini obiecte in XAML care nu fac parte din arborele vizual
dar sunt disponibile pentru a fi utilizate in interfata GUI
Avantajele definirii de obiecte in sectiunea de Resources fat de
definirea unor obiecte la fiecare utilizare:
Se castiga in gradul de reutilizare
Se castiga in flexibilitate prin separarea obiectelor folosite in interfata
de interfata GUI. Astfel se poate face refactoring la interfata fara a fi
necesar reproiectarea acesteia ex: colectii diferite de resurse pt
aplicatii localizate
<Window.Resources>
<RadialGradientBrush x:Key="myBrush">
<GradientStop Color="CornflowerBlue" Offset="0" />
<GradientStop Color="Crimson" Offset="1" />
</RadialGradientBrush>
</Window.Resources>
<Application x:Class="WpfApplication2.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Window1.xaml">
<Application.Resources>
<SolidColorBrush x:Key="appBrush" Color="PapayaWhip" />
</Application.Resources>
</Application>
Diferenta:
resursele referite static sunt regasite doar o singur data si utilizate pe
toata durata de viat a resursei
Resursele referite dinamic sunt achizitionate la fiecare referire a
63
obiectului care le utilizeaz
Dictionare de resurse
1.
2.
Cristian Bologa
Cluj-Napoca - 25 Noiembrie
2015
65
Arhitectura de gestiune a
evenimentelor
Sunt multicast -> pot memora referinte ctre mai multe handlere
Functioneaz ca si un dispecer intre clasa care arunc
evenimentul prin gestionarea unei liste de handlere de
evenimente
66
Lucrul cu delegates
1. declararea delegate-ului
67
Handlere de evenimente
Argumentele handlerului
Un obiect care a aruncat evenimentul (sender)
Un obiect care contine informatie specifica evenimentului (de tip
EventArgs)
68
La runtime
69
70
Evenimente directe
71
Evenimente bubbling
72
RoutedEventArgs
73
<Grid Button.Click="button_Click">
<Button Height="23" Margin="132,80,70,0" Name="button1"
VerticalAlignment="Top" >Button</Button>
</Grid>
74
76
77
EventManager.RegisterClassHandler(typeof(Window1),
SuperClickEvent,SuperClickHandler);
78
79
80
Comenzi
Comenzi predefinite
ApplicationCommands
ComponentCommands
EditingCommands
MediaCommands
NavigationCommands
82
83
Invocarea comenzii
Prin asocierea ei cu un control folosind un input sau invocare direct din cod
84
Handlere de comenzi
Crearea CommandBinding
-asociaza o comanda cu un command handler
CommandBinding abinding = new CommandBinding();
abinding.Command = ApplicationCommands.Find;
abinding.Executed += new ExecutedRoutedEventHandler(myCommandHandler);
this.CommandBindings.Add(abinding);
85
86
Comenzi Bubbling
87
Dezactivarea comenzilor
88
Cristian Bologa
Cluj-Napoca - 2 Decembrie
2015
89
Cuprins
90
91
92
93
Property attributes
95
Create de la zero
Se mosteneste din clasa Control
Trebuie s se suprascrie metoda OnPaint
Trebuie folosit obiectul Graphics pentru a realiza desenarea
controlului in OnPaint
96
Template-uri pt controale
98
Interactivitatea controalelor
Controalele interactioneaz cu utilizatorul in diverse modaliti (de
exemplu la mouse rollover deasupra controlului)
ControlTemplate.Triggers: o colecie de triggere a templateului
<ControlTemplate TargetType="{x:Type Button}" x:Key="ButtonTemplate">
<Border Name="Bord1" BorderBrush="Chocolate" BorderThickness="3">
<Grid>
<Rectangle Name="Rect1" Fill="RoyalBlue" />
<Ellipse Name="Elli1" Fill="Red" />
<ContentPresenter HorizontalAlignment="Center VerticalAlignment="Center" />
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Rect1" Property="Fill" Value="AliceBlue" />
<Setter TargetName="Bord1" Property="BorderBrush" Value="Red" />
<Setter TargetName="Elli1" Property="Fill" Value="Yellow" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
99
Template binding
...
<Setter TargetName="Elli1" Property="Fill" Value="{Binding
RelativeSource={RelativeSource TemplatedParent},
Path=Background}" />
100
101
2 mari categorii:
Controale utilizator (user control): mostenite din UserControl
Controale custom (custom control): mostenite din Control sau
ContentControl
102
Dependency properties
104
static PieClass()
{
FrameworkPropertyMetadata md = new FrameworkPropertyMetadata(new
PropertyChangedCallback(FlavorPropertyChanged));
PieClass.FlavorProperty = DependencyProperty.Register("Flavor",
typeof(string), typeof(PieClass), md);
}
private static void FlavorPropertyChanged(DependencyObject o,
DependencyPropertyChangedEventArgs e)
{
// Implementation omitted
}
105
106
107
xmlns:cc="clr-namespace:WpfCustomControlLibrary1;
assembly=WpfCustomControlLibrary1"
<cc:CustomControl1 />
5. se face build
108
Theme
label1.Background = SystemColors.ControlBrush;
109
Cristian Bologa
ADO.NET
Aplicatii Windows
Aplicatii web
Ce este un DataReader?
Obiectele connection
gestioneaza conexiunea cu
serverul de date
Obiectele Command sunt
wrappere pentru comenzi Sql
DataAdapter contin obiecte de
tip Command
SelectCommand aduce date
in DataReader care poate fi
iterat
DataSet
mediul de programare a construit clase pentru DataSet si pentru fiecare tabel a datasetului
Tabelele pot fi accesate prin numeObiectDataSet.numeTabel
Datele din tabele pot fi accesare prin numeObiectDataTable.numeColoana
DataTable
DataAdapter
Modelul conceptual:
Mapat pe modelul logic
O vedere business asupra datelor astfel incat s se evite operaii join
complexe
3. Code-design only
Modelul este generat doar la run-time
Entity designer
Cristian Bologa
124
Data binding
125
Clasa Binding
Descrie relaia dintre proprietile int si surs
Proprieti ale clasei Binding:
126
sau
<Label Height="25" Width="100">
<Label.Content>
<Binding ElementName="Slider1" Path="Value" />
</Label.Content>
</Label>
sau
Binding aBinding = new Binding();
aBinding.ElementName = "Slider1";
aBinding.Path = new System.Windows.PropertyPath("Value");
Label1.SetBinding(ContentProperty, aBinding);
BindingOperations.ClearBinding(this.Label1, ContentProperty);
127
128
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<local:aClass x:Key="theObject" />
</Window.Resources>
<Grid>
<Button Content="{Binding Source={StaticResource theObject},
Path=myProperty}" />
</Grid>
</Window>
129
Proprietatea DataContext
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Window.Resources> <local:myDataClass x:Key="aDataObject" />
</Window.Resources>
<Grid DataContext="{StaticResource aDataObject}">
<Label Content="{Binding Path=myTitle}" />
</Grid>
</Window>
130
Utilizarea DataContext
<Grid Name="Grid1">
<Label Content="{Binding Path=myTitle}" />
</Grid>
131
Binding Mode
132
UpdateSourceTrigger
133
Conversia datelor
Implementarea IValueConverter
Metoda Convert: converteste inputul la tipul output
ConvertBack: conversia invers
[ValueConversion(typeof(int), typeof(string))]
134
Formatarea datelor
Se utilizeaz converteri
Formatarea ca si o valut:
aString = aDouble.ToString("C");
135
136
Validarea datelor
<TextBox>
<TextBox.Text>
<Binding Path="CandyBars">
<Binding.ValidationRules>
<local:CandyBarValidationRule />
<local:SweetTreatsValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
137
validare
138
139
Proprietatea Action: dac eroarea este nou sau este o eroare veche
Error: eroarea efectiv
140
Legarea la o list
2 situaii:
Legarea unui singur element la o list de obiecte i facilitarea navigrii
in lista de obiecte
Legarea unei colecii (precum elementele unui ListBox) la o list de
obiecte astfel incat toate elementele listei sunt afisate
Memoreaz starea curent (de navigare) in colecie, vederi, grupri si sortri ale
elementelor
System.ComponentModel.ICollectionView myView;
myView = CollectionViewSource.GetDefaultView (myCollection);
142
143
144
145
DataTemplate
146
Cristian Bologa
147
LINQ
Deffered execution
O interogare LINQ este un obiect generic de tipul Ienumerable
variabila la care rezultatul e asignat (results) este un range variable
nu este o colectie populat, LINQ nu acceseaz sursa de date dect la utilizarea
obiectului care lucreaz cu results e cunoscuta sub numele de defered execution
148
LINQ providers
149
Initializarea obiectelor
Object initializer:
Se execut default constructorul generat de compilator si apoi se
asigneaz proprietile cu valori
150
Proiectii
151
152
Tipuri anonime
var x = new {Make = "VW", Model = "Bug"};
txtLog.AppendText(x.Make + ", " + x.Model);
153
154
155
Metode extensii
Putem aduga metode unui tip chiar dac nu avem codul surs
pentru tipul respectiv
Problem: s adaugm o metod isNumeric clasei string
Soluie clasic: creem o clas StringHelper care s conin toate
metodele noi pe care dorim s le adugm iar aceste metode s
preia o valoare de tip string ca i prim parametru
156
Metode extensii
Extension method: putem crea o clas public static iar metoda nou s o
facem membr a acestei clase
Se foloseste cuvantul cheie this inaintea primului parametru pentru a se
indica faptul c metoda este o extensie a acestuia
157
158
LINQ keywords
159
Proiecii si let
160
where
orderby
Permite sortare cresctor / descresctor
Se poate sorta pe mai multe proprieti
var sorted = from c in cars
orderby c.Make ascending, c.Model descending
select c;
161
Paginare
162
Join
163
Inner join
164
Outer join
165
Cross join
Produs cartezian intre 2 elemente sursa
Se foloseste clauza from de mai multe ori
var carsWithRepairs = from car in cars
from color in colors
orderby car.VIN, color
select new
{
car.VIN,
car.Make,
car.Model,
Color=color
};
166
LINQ to SQL
167
Examinarea modelului
Clasa DataContext
170
171
172
Cristian Bologa
174
Modelul conceptual:
Mapat pe modelul logic
O vedere business asupra datelor astfel incat s se evite operaii join
complexe
175
3. Code-design only
Modelul este generat doar la run-time
176
177
178
Modelarea datelor
179
Scenarii de mapare
Single mapping: o entitate din modelul conceptual este mapat catre o singur
tabel din modelul fizic modelul implicit
Entity splitting: proprieti dintr-o singur entitate a modelului conceptual sunt
mapate n coloane din 2 sau mai multe tabele care partajeaza o cheie primara
comun
Partiionare orizontal a modelului conceptual: mai multe entiti din modelul
conceptual cu aceleasi proprieti sunt mapate pe o singur tabel
Motenire TPH (table per class hierachy): toate tipurile dintr-o ierarhie de
motenire sunt mapate pe o singur tabel
Motenire TPT (table per type): toate tipurile sunt mapate in tabele individuale
Motenire TPC (table per concrete class): tipurile ne-abstracte sunt mapate pe
tabele individuale. Fiecare tabel are coloane care mapeaz toate proprietile
tipurilor derivate, inclusiv proprietile mostenite de la clasa de baz
Mai multe seturi de entiti pe tip: o singur entitate este expus in dou sau
mai multe seturi de entiti din modelul conceptual. Fiecare set de entiti este
mapat in tabele separate in modelul fizic
Tipuri complexe: e o proprietate nescalar a unui entity type care nu are o
proprietate cheie. Se mapeaz tipuri complexe pe tabele din BD
180
Mapare function import: o procedur stocat din modelul fizic este mapat
pe un element FunctionImport din modelul conceptual
Mapare modification function: se definesc proceduri stocate in modelul fizic
pentru a reprezenta operaiile de insert, update, delete
Mapare bazat pe interogri: in modelul fizic se defineste o interogare
pentru a aduce date intr-o tabel a sursei de date. Elementul acesta de tip
DefiningQuery este mapat pe un tip entitate in modelul conceptual
Mapare bazat pe vederi: reprezint o mapare de tip read-only intre tipuri
de entiti din modelul conceptual i tabele din modelul fizic . Nu permite
realizarea operaiilor de update
Mapari de tip AssociationSet: asocieri (fie one-to-one sau one-to-many) din
modelul conceptual sunt mapate pe asocieri din modelul fizic
Asocieri Many-to-Many: fiecare capt al unei asocieri este mapat intr-o
tabel legtur in modelul fizic
Self association: asocieri intre 2 entiti de acelai tip
181
Code-first vs database-first
182
183
184
185
ObjectContext
186
187
Gheorghe Cosmin
Silaghi
Cluj-Napoca - 4 Ianuarie
2016
ASP.NET
Parte de server:
Limbaj de programare pe parte de server: C# sau VB
Utilizarea tehnologiilor de conectare la baze de date pentru realizarea
site-urilor dinamice specifice .NET
Parte de client:
HTML, CSS, Javascript
Controale web i web forms
Cluj-Napoca - 4 Ianuarie
2016
Proiecte ASP
}
Cluj-Napoca
//Code-behind.aspx.cs
- 4 Ianuarie 2016
Dezavantaje:
Fisiere de configurare
Caching in ASP.NET
Tipuri de caching:
La nivel de aplicatie web o collectie ce poate stoca in
memorie orice tip de obiect. Obiectul va fi automat eliminat in
functie de diferite contrangeri.
La nivel de pagina stocarea unei pagini sau a unei portiuni de
pagini gata incarcata
Application Caching
Utilizarea temelor
Regula de aplicare a
temelor
1.
2.
3.
4.
5.
Gheorghe Cosmin
Silaghi
Cluj-Napoca - 6 Ianuarie
2015
Ciclul de via a paginilor web: mult mai scurt decat cel al unei aplicaii
windows
La fiecare incarcare a paginii, se creaz noi obiecte
Obiectele sunt distruse cand se iese din pagina
Cluj-Napoca - 6 Ianuarie
2015
Acesta permite acces la itemii din environment, precum folderul cu resursele aplicaiei
Cluj-Napoca - 6 Ianuarie
2015
Application_Error: atunci cand apar erori care nu sunt prinse si care sunt aruncate
pn la acest nivel
Cluj-Napoca - 6 Ianuarie
2015
Ciclul de
via a
unei
pagini
web
Se pun procesri dup initializare dar care trebuiesc facute inainte care view state-ul
controalelor s se restabileasc
De obicei se verific daca este postback i se fac procesri speciale pentru acest caz
Mai intai se lanseaz Load pentru pagin, si apoi evenimente load pentru fiecare control din
pagina respectiv
Automatic postback
View state
Campuri ascunse
Cookies
Query string
Trafic sczut:
View state
Acest mecanism permite ASP.NET s aib date obiecte intre mai multe cereri
fr s le stocheze pe server
Se poate folosi view state pentru a persista date intre cererile unui
client
Campuri ascunse
Cookies
Cookies
Query string
Sesiunii cookieless
Gheorghe Cosmin
Silaghi
Cluj-Napoca - 11 Ianuarie
2016
Controale server
Cluj-Napoca - 11 Ianuarie
2016
Label
Cluj-Napoca - 11 Ianuarie
2016
Controlul Literal
Cluj-Napoca - 11 Ianuarie
2016
Controlul TextBox
Controlul CheckBox
Controlul RadioButton
Controlul DropDownList
Controlul Listbox
Controlul Button
Controlul Image
Controlul Calendar
Controlul FileUpload
Controlul Panel
Controlul Wizard
Server-side validation
Client-side validation
Grupuri de validare
Controale de validare
RangeValidator:
RegularExpressionValidator:
CustomValidator:
Navigarea in site
Client-side navigation
Cross-page
Redirectionare
Gheorghe Cosmin
Silaghi
Cluj-Napoca - 13 Ianuarie
2016
Debugging
Activarea debugerului:
1. in solution explorer click dreapta pe website, si apoi pagina
properties
2. se selecteaz start options (sau Web in VS 2013)
3. in sectiunea Debuggers se selecteaz ASP.NET
Cluj-Napoca - 13 Ianuarie
2016
Configurarea debuggerului
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<system.web>
</configuration>
Cluj-Napoca - 13 Ianuarie
2016
<configuration>
<system.web>
<customErrors defaultRedirect="SiteErrorPage.aspx" mode="RemoteOnly">
<error statusCode="403" redirect="RestrictedAccess.aspx" />
</customErrors>
<system.web>
</configuration>
Cluj-Napoca - 13 Ianuarie
2016
Remote debugging
Tracing
<configuration>
<system.web>
<trace enabled="true"
requestLimit="100"
pageOutput="false"
traceMode="SortByTime"
localOnly="false"
mostRecent="true" />
<system.web>
</configuration>
Clasa Trace
In namespace-ul system.Diagnostics
Se pot afisa propriile mesaje de trace care s apar in paginile de
trace
Fiecare mesaj are o categorie si un mesaj
Trace.Write("Custom Category", "Page_Load called");
User profiles
Se foloseste Aspnet_regsql.exe
Dac se execut fr parametrii: se porneste o interfa grafic un un wizzard
Dup ce baza de date este configurat, trebuie pus connection stringul in web.config
Identificarea utilizatorilor
Salvarea profilelor
Impersonation
Pentru a se realiza
impersonare la un username
specificat
<identity impersonate="true"
userName="DOMAIN\UserName"
password="Password"/>
Form authentication
Sintaxa fisierului de
configurare
<authentication mode="[Windows|Forms|None]">
<forms name="name" loginUrl="url"
protection="[All|None|Encryption|Validation]
timeout="minutes" path="path
requireSSL="[true|false]
slidingExpiration="[true|false]
defaultUrl="string
cookieless="[UseCookies|UseUri|
AutoDetect|UseDeviceProfile]"
domain="string>
<credentials passwordFormat="[Clear|MD5|SHA1]">
<user name="********" password="********"/>
</credentials>
</forms>
</authentication>
Sintaxa fisierului de
configurare
<authorization>
<allow users="comma-separated list of users
roles="comma-separated list of roles
verbs="comma-separated list of verbs" />
<deny users="comma-separated list of users
roles="comma-separated list of roles
verbs="comma-separated list of verbs" />
</authorization>
<identity impersonate ="[true|false]
userName="domain\username"
password="password" />
<trust level="[Full|High|Medium|Low|Minimal]"
originUrl=""/>
Cluj-Napoca - 13 Ianuarie 2016
Windows authentication
<system.web>
<authentication mode="Windows"/>
</system.web>
Identitatea Windows furnizata sistemului de operare este utilizata
pentru verificarea permisiunilor precum drepturi asupra fisierelor locale
sau conectarea la baza de date utilizand integrated security
Implicit, aceasta este identitatea procesului ASP.NET
Impersonarea identitatii furnizate de IIS pentru toate taskurile din
sistemul de operare Windows care necesita autentificare (precum
accesul la fisiere sau la retea):
<system.web>
<authentication mode="Windows"/>
<identity impersonate="true"/>
</system.web>
Cluj-Napoca - 13 Ianuarie 2016
Forms authentication
Clasa FormsAuthentication
Aplicatia se redirecteaza automat catre forma de Login atunci cand se
solicita access la o resursa protejata
Daca credentialele sunt valide, clasa FormsAuthentication permite sa se
redirecteze apelul inapoi la cererea initiala
Forms authentication se seteaza in Web.config
Credentialele pot fi setate fie in web.config fie intr-un fisier separat
<authentication mode="Forms">
<forms name="SavingsPlan" loginUrl="/Login.aspx">
<credentials passwordFormat="SHA1">
<user name="Kim
password="07B7F3EE06F278DB966BE960E7CBBD103DF30CA6"/>
<user name="John
password="BA56E5E0366D003E98EA1C7F04ABF8FCB3753889"/>
</credentials>
</forms>
</authentication>
String authUser2 = User.Identity.Name;
Cluj-Napoca - 13 Ianuarie 2016
Membership providers:
SQL Server
Active directory