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:
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:
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
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:
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
Partager