Bonjour à tous!
J'aimerais trouver et réparer le problème qui fait que ma méthode renvoie un tableau de valeur null alors qu'elle devrait renvoyer des valeurs précises(permettant de certifier l'envoi du sms) Ce n'est pas moi qui ait rédigé et commenté le code à l'origine, du coup certains passages me semblent un peu flous.
Notamment:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
byte[] dataToPost = new ASCIIEncoding().GetBytes( strData.ToString() );
=> N'est-il pas bizarre de donner à datapost[] une valeur de bytes de zéro?(puisque strData a une length de zéro?) Sachant que l'on donne plus tard cette valeur à la longueur de la requête cela me parait étrange.

J'ignore si c'est important mais les valeurs de myStream.Length, myStream.Position, responseStream.Length, responseStream.Position, streamReader.Length et streamReader.Position sont "
((System.Net.ConnectStream)myStream).Position' a levé une exception de type 'System.NotSupportedException'
A la fin, result a pour valeur :
"0: Accepted for delivery "
Normalement le traitement qu'on affiche aux différentes lignes de Result[] est censé nous rendre Results[0].Trim() = "100" ou = "101" (ce qui signifie respectivement que le sms a bien été envoyé ou sera envoyé en différé)
Or ici, il me semble qu'il ne fait pas du tout ça. En fait il passe au catch dès qu'il arrive sur la première ligne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Results[0] = result.Remove( result.IndexOf( "StatusText" ), result.Length - result.IndexOf( "StatusText" ) ).Substring( result.IndexOf( "Status" ) + 7 );
car cette exception est levée :
+ [System.ArgumentOutOfRangeException] {"StartIndex ne peut pas être inférieur à zéro.\r\nNom du paramètre*: startIndex"} System.ArgumentOutOfRangeException
La ligne de code rend un startindex(de la fonction remove je crois) négatif.
C'est donc pourquoi il renvoie un Results null.(Results a été instancié comme ça dès sa création)

Je viens ici par derniers recours mais en essayant d'expliquer la situation je me rend compte que sans avoir le programme sous le nez et en connaissant toute la situation vous aurez surement du mal à m'aider..

A vrai dire je ne comprend pas les lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Results[0] = result.Remove( result.IndexOf( "StatusText" ), result.Length - result.IndexOf( "StatusText" ) ).Substring( result.IndexOf( "Status" ) + 7 );
					Results[1] = result.Remove( result.IndexOf( "Credits" ), result.Length - result.IndexOf( "Credits" ) ).Substring( result.IndexOf( "StatusText" ) + 11 );
					Results[2] = result.Remove( result.IndexOf( "UnvalidNums" ), result.Length - result.IndexOf( "UnvalidNums" ) ).Substring( result.IndexOf( "Credits" ) + 8 );
					Results[3] = result.Substring( result.IndexOf( "UnvalidNums" ) + 1 );
D'ou sortent ces StatusText, Credits et UnvalidNums??

Voilà le code de la méthode:

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
 
public string[] SendSMS ( string[] numerosTelephone, string Message )
		{
			Results = new string[4];
			//Le flux XMl à envoyer au serveur SMS
			flux_xml = "<DATA><CLIENT>" + LoginSMS + "</CLIENT><MESSAGE>" + Message
						+ "</MESSAGE><CAMPAIGN_NAME>AUDI Sterling Occasion</CAMPAIGN_NAME><DATE></DATE><MSGCLASS>1</MSGCLASS><MAIL_NOTIF></MAIL_NOTIF>"
						+ ListeNumeroTelephone( numerosTelephone );
			String SocietyName = "";
			try{
				SocietyName = BusParametre.GetInstance().getTableSociete().Rows[0]["NOM_SOCIETE"].ToString();
			}catch(Exception){
				SocietyName = "inconnue";
			}
 
			int CreditSMS = -1;
			try{
				CreditSMS = BusParametre.GetInstance().GetCreditSMS();
			}catch(Exception){
				CreditSMS = -1;
			}
 
			//les donnees a poster au serveur
			StringBuilder strData = new StringBuilder();
 
 
			//On transforme le tout en tableau de byte
			byte[] dataToPost = new ASCIIEncoding().GetBytes( strData.ToString() );
 
			// On cree la requete Http
			HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create( ServeurSMS + "clientcode=" + LoginSMS + "&passcode=" + PasswordSMS
			+ "&societe=" + SocietyName + "&creditSMS=" + CreditSMS + "&XMLFlow=" + flux_xml);
            System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
 
			//ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(ValidateRemoteCertificate);
 
 
			//Serveur PROXY
			if( Proxy == "True" )
			{
				WebProxy myProxy = new WebProxy();
 
				// Obtain the 'Proxy' of the  Default browser.
				myProxy = (WebProxy)myRequest.Proxy;
				try
				{
					string proxyAddress = ServeurProxy;
 
					if( proxyAddress.Length > 0 )
					{
						string username = LoginProxy;
						string password = PasswordProxy;
 
						// Create a new Uri object.
						Uri newUri = new Uri(proxyAddress); //15/01/13 paramètre false retiré
 
						// Associate the newUri object to 'myProxy' object so that new myProxy settings can be set.
						myProxy.Address = newUri;
 
						// Create a NetworkCredential object and associate it with the Proxy property of request object.
						myProxy.Credentials = new NetworkCredential(username,password);
						myRequest.Proxy = myProxy;
					}
				}catch( Exception Except )
				{
					//Gerer l'execption du proxy
					throw( Except );
				}
			}
			//On specifie la commande a utiliser dans notre cas POST
			// Envoi de donnes au programme situ  l'URL spcifie
			myRequest.Method = "POST";
 
			//Le type de contenu du corps de la requte
			myRequest.ContentType="application/x-www-form-urlencoded";
 
			//Longueur du corps de la requte
			myRequest.ContentLength = dataToPost.Length;
 
			//On ecris les donnee dans la requete
			Stream myStream = myRequest.GetRequestStream();
 
			// Envoie des donnees
			myStream.Write(dataToPost,0,dataToPost.Length);
			myStream.Close();
 
			//On recupere la reponse
			WebResponse myResponse = myRequest.GetResponse();
 
			//on cree un flux
			Stream responseStream = myResponse.GetResponseStream();
 
			//On instancie un objet de type streamreader
			StreamReader streamReader = new StreamReader(responseStream);
 
			//On lit la totalite du flux
			string result = streamReader.ReadToEnd().Replace("\n", "").Replace("\r", "");
 
			//on ferme les flux
			streamReader.Close();
			responseStream.Close();
			myResponse.Close();
			myStream.Close();
 
			try
			{
				if( result  != null && result != "" )
				{
					Results[0] = result.Remove( result.IndexOf( "StatusText" ), result.Length - result.IndexOf( "StatusText" ) ).Substring( result.IndexOf( "Status" ) + 7 );
					Results[1] = result.Remove( result.IndexOf( "Credits" ), result.Length - result.IndexOf( "Credits" ) ).Substring( result.IndexOf( "StatusText" ) + 11 );
					Results[2] = result.Remove( result.IndexOf( "UnvalidNums" ), result.Length - result.IndexOf( "UnvalidNums" ) ).Substring( result.IndexOf( "Credits" ) + 8 );
					Results[3] = result.Substring( result.IndexOf( "UnvalidNums" ) + 1 );
					if( Results[0].Trim() != "100" && Results[0].Trim() != "101" )
					{
						new fr.id2Software.podologie.business.CustomException ( Results[1] );
					}
				}else
				{
					Results = null;
				}
			}catch(Exception e)
            { throw (e); }
			return( Results );
		}
Merci aux courageux qui voudront bien m'aider car je me rend bien compte que je ne suis pas très clair, pourtant je m'efforce de l'être