Bonjour à tous,
Je suis en train de passer du fwk 2.0 au 3.5 pour le développement d'application en remoting.
J'ai vu que les nouvelles techno WCF et Link to sql était assez sympa pour faire cela.
Je crée mes BusinessObject genre User, Groupe, UserbyGroup.
J'ai hérité la List<User> en lui ajoutant un datacontext. pour pouvoir faire les savechange...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 [System.Data.Linq.Mapping.Table(Name = "dbo.hab_users")] public class User { #region Properties private int _Ident; [System.Data.Linq.Mapping.Column(Storage = "_Ident", Name = "Ident", DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true, CanBeNull = false)] public int Ident { get { return _Ident; } set { _Ident = value; } } private string _FullName; [System.Data.Linq.Mapping.Column(Storage = "_FullName", Name = "FullName", DbType = "char(60)", CanBeNull = true)] public string FullName { get { return _FullName; } set { _FullName = value; } } ...
Pour mon interface WCF.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 public class UserList : List<User> { private System.Data.Linq.DataContext _Datacontext; public System.Data.Linq.DataContext Datacontext { get { return _Datacontext; } set { _Datacontext = value; } } ... public static UserList SelectAllUsers() { System.Data.Linq.Table<User> Users; UserList lsUsrLst = new UserList(); lsUsrLst._Datacontext = new System.Data.Linq.DataContext(@"Data Source=MonPC\SQLEXPRESS;Initial Catalog=TestWCF;Integrated Security=True"); Users = lsUsrLst._Datacontext.GetTable<User>(); var vQuerryUser = from oUsers in Users select oUsers; lsUsrLst.AddRange(vQuerryUser.ToList()); return lsUsrLst; } ... public void SaveChange() { this._Datacontext.SubmitChanges(); } public void CancelChange() { this._Datacontext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, this); } public void Refresh() { this.SaveChange(); this._Datacontext.Refresh(System.Data.Linq.RefreshMode.KeepChanges, this); }
Vous aurez compris que dans ma classe HabFactory, je ne fait que return UserList.SelectAllUsers(); ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 [ServiceContract()] public interface IHabFactory { [OperationContract()] BusinessOjbects.HAB_Objects.UserList SelectUserByLogin(string strLogin); [OperationContract()] BusinessOjbects.HAB_Objects.UserList SelectAllUsers(); }
Tout ce petit monde étant exécuté par un service Windows.
Coté client, J'ai une form login qui lance les instructions suivantes lorsque l'on clique sur valider.
et au SaveChange() j'ai une Exception object not set... mon Datacontext est null.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 System.ServiceModel.ChannelFactory<IHabFactory> myChannelFactory = null; IHabFactory myService; myChannelFactory = new System.ServiceModel.ChannelFactory<IHabFactory>("ConfigurationHttpUser"); myService = myChannelFactory.CreateChannel(); BusinessOjbects.HAB_Objects.UserList usrLst = myService.SelectUserByLogin(ucLoginPannel1.LoginValue); if (usrLst!= null && usrLst.First().Connect(ucLoginPannel1.PasswordValue)) // Connect est une methode de User qui decrypte le mot de passe et le vérifie puis met a jour certain champs. { System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(usrLst.First().PreferedLanguage.Trim()); // la langue de l'application change comme il faut. usrLst.SaveChange(); ...
Est ce que vous pourriez m'éclairer sur la marche a suivre dans ce genre de cas? ou tout du moins une piste.
A savoir que j'ai dans l'idée de faire une interface WCF par groupe de businessobjet
ex:
Hab* : gestion utilisateur....
Sys* : gestion Message d'erreur, ...
Bo* : Objet de l'applicatif...
Pensez vous que c'est une solution viable?
Merci d'avance
Partager