Bonjour à tous !

Voilà, dans le cadre de mon emploi, je dois développer un site internet permettant d'accéder à une session Terminal Server, sur l'un de nos serveurs.
Tout existe en ASP.NET 1.1, cependant, pour pallier a des exigences technologiques, il faut le refaire en 2.0, et malheureusement, le code importé tel quel, ne fonctionne pas.

J'ai essayé à partir de diverses sources sur le net, mais rien ne semble fonctionner.

Je dispose du fichier msrdp.cab (et son contenu, le fichier OCX et l'INF), permettant d'installer le controle ActiveX.

Cependant, quand je reprends des sources trouvés sur le net, j'ai un beau message d'erreur...

Voici le code et l'erreur, dont j'ignore la provenance...

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
 
private void Page_Load(object sender, System.EventArgs e)
        {
            //try
            //{
                //HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
                string ServerName = "192.168.176.100";
                string Domain = "";
                string UserName = "monlogin";
                string Password = "monpass";
                string reswidth = "640";
                string resheight = "480";
 
                HtmlGenericControl div = new HtmlGenericControl("div");
                //div.ID = "connectArea";
                //HtmlGenericControl center = new HtmlGenericControl("center");
                //div.Controls.Add(center);
 
                // Connect button for testing
                //HtmlInputButton rdpButton = new HtmlInputButton();
                //rdpButton.Attributes.Add("type", "button");
                //rdpButton.Attributes.Add("id", "btnConnect");
                //rdpButton.Attributes.Add("name", "ConnectButton");
                //rdpButton.Attributes.Add("value", "Connect");
                //rdpButton.Attributes.Add("runat", "server");
                //rdpButton.Attributes.Add("onclick", "return RdpConnect()");
                //Page.Controls.Add(rdpButton);
 
                // MsRdpClient ActiveX object
                HtmlGenericControl rdp = new HtmlGenericControl("object");
                rdp.Attributes["id"] = "MsRdpClient";
                rdp.Attributes["name"] = "MsRdpClient";
                rdp.Attributes["classid"] = "clsid:9059f30f-4eb1-4bd2-9fdc-36f43a218f4a";
                rdp.Attributes["codebase"] = "~/bin/msrdp.cab#version=5,1,2600,1095";
                //rdp.Attributes["runat"] = "server";
                rdp.Attributes["width"] = reswidth;
                rdp.Attributes["height"] = resheight;
                div.Controls.Add(rdp);
 
                Panel p = new Panel();
                p.ID = "Panel1";
                p.ScrollBars = ScrollBars.Both;
                p.Wrap = true;
                p.Height = Unit.Percentage(60);
                p.Width = Unit.Percentage(100);
                p.Controls.Add(div);
                Page.Controls.Add(p);
 
                // rdpConnect
                StringBuilder rdpConnect = new StringBuilder();
                rdpConnect.Append("function RdpConnect()");
                rdpConnect.Append("{");
                rdpConnect.AppendFormat("MsRdpClient.Server=\"" + ServerName + "\";");
                rdpConnect.AppendFormat("MsRdpClient.Domain=\"" + Domain + "\";");
                rdpConnect.AppendFormat("MsRdpClient.UserName=\"" + UserName + "\";");
                rdpConnect.AppendFormat("MsRdpClient.AdvancedSettings2.ClearTextpassword=\"" + Password + "\";");
                rdpConnect.Append("MsRdpClient.FullScreen=0;");
                rdpConnect.Append("MsRdpClient.Width=\"" + reswidth + "\";");
                rdpConnect.Append("MsRdpClient.Height=\"" + resheight + "\";");
                rdpConnect.Append("MsRdpClient.DesktopWidth=\"" + reswidth + "\";");
                rdpConnect.Append("MsRdpClient.DesktopHeight=\"" + resheight + "\";");
                rdpConnect.Append("MsRdpClient.AdvancedSettings2.RedirectDrives=0;");
                rdpConnect.Append("MsRdpClient.AdvancedSettings2.RedirectPrinters=1;");
                rdpConnect.Append("MsRdpClient.AdvancedSettings2.RedirectPorts=0;");
                rdpConnect.Append("MsRdpClient.AdvancedSettings2.RedirectSmartCards=0 ;");
                rdpConnect.Append("if (MsRdpClient.SecuredSettingsEnabled)");
                rdpConnect.Append("{");
                rdpConnect.Append("MsRdpClient.SecuredSettings.StartProgram=\"notepad.exe\";");
                rdpConnect.Append("}");
                rdpConnect.AppendFormat("MsRdpClient.FullScreenTitle=\"" + ServerName + "\";");
                rdpConnect.Append("MsRdpClient.OnDisconnected=MsRdpClient_OnDisconnec ted();");
                rdpConnect.Append("MsRdpClient.Onconnected=MsRdpClient_Onconnected(); ");
                rdpConnect.Append("MsRdpClient.Connect()");
                rdpConnect.Append("}");
 
                //anu
                // MsRdp_onConnected
                StringBuilder connected = new StringBuilder();
                connected.Append("Function MsRdpClient_OnConnected()");
                connected.Append("{");
                connected.AppendFormat("Window.Navigate(\"items.aspx?nid=Maintenance\");");
                connected.AppendFormat("return true;");
                connected.Append("}");
                // Insert the javascript function
                HtmlGenericControl connectFunction = new HtmlGenericControl("script");
                connectFunction.Attributes.Add("type", "text/javacript");
                connectFunction.Attributes.Add("language", "javascript");
                connectFunction.Attributes["runat"] = "server";
                connectFunction.InnerHtml = connected.ToString();
 
                // MsRdp_onDisConnected
                StringBuilder disconnected = new StringBuilder();
                disconnected.Append("Function MsRdpClient_OnDisconnected()");
                disconnected.Append("{");
                disconnected.AppendFormat("history.go(-1)");
                //disconnected.AppendFormat("Window.Navigate(\"items.aspx?nid=Maintenance\");");
                disconnected.AppendFormat("return true;");
                disconnected.Append("}");
                // Insert the javascript function
                HtmlGenericControl disconnectFunction = new HtmlGenericControl("script");
                disconnectFunction.Attributes.Add("type", "text/javacript");
                disconnectFunction.Attributes.Add("language", "javascript");
                disconnectFunction.Attributes["runat"] = "server";
                disconnectFunction.InnerHtml = disconnected.ToString();
                Page.Controls.Add(disconnectFunction);
 
                //here
 
                // Insert the javascript function
                HtmlGenericControl rdpFunctions = new HtmlGenericControl("script");
                rdpFunctions.Attributes.Add("type", "text/javascript");
                rdpFunctions.Attributes.Add("language", "javascript");
                rdpFunctions.Attributes["runat"] = "server";
                rdpFunctions.InnerHtml = rdpConnect.ToString();
                Page.Controls.Add(rdpFunctions);
 
                // call the Javascript function RdpConnect() here
                LiteralControl rdpconnect = new LiteralControl("<script type='text/javascript'>RdpConnect();</script>");
                Page.Controls.Add(rdpconnect);
                //p.Controls.Add(rdpconnect);
            //}
            //catch (Exception e)
            //{
            //    FormsAuthentication.SignOut();
            //    Response.Redirect("Login.aspx", true);
            //}
        }
Et l'erreur rencontrée est :

La collection Controls ne peut pas être modifiée, car le contrôle contient des blocs de code (c'est-à-dire <% ... %>).

Ceci intervient lorsque je fais le "Page.Controls.Add(p);" (ligne 46 du code, lors de la création du Panel)

Auriez-vous une idée de la manière de procéder, même si je dois pour cela revoir tout mon code, afin de parvenir à faire marcher ce satané contrôle ActiveX MSRDP...

Merci beaucoup à ceux qui prendront le temps de lire, et encore plus à ceux qui réfléchiront, et trouveront une solution.

Ciao ciao ! ^^