Accueil > > > GESTION D'UNE MQ SERIES ( MESSAGE QUEUE SERIES ) D'IBM AVEC C#.NET
GESTION D'UNE MQ SERIES ( MESSAGE QUEUE SERIES ) D'IBM AVEC C#.NET
Information sur la source
Description
Bonjour ce tutorial s'adresse à tous les développeurs c# .NET (win/web) et qui sont dans la nécessité d'utiliser la MQ Series (Message Queue) d'IBM pour véhiculer leurs messages d'une application à une autre. cette classe contients les méthodes nécessaires et suffisantes pour gérer sa MQ. énumération : /// Constructeur de la classe MQManagerClass qui contient les attributs de notre MQ public MQManagerClass(string sQueueName,string sQueueManagerName,string sChannelInfo){} /// Connection et renvois un pointeur sur la queue public MQQueueManager ConnectQueue(MQManagerClass mqtest){} /// determine si on a un accees à la queue et renvoi un objet de la classe MQQueue si oui, sinon null /// +spécification des options pour l'accès à la queue public MQQueue MQ_AccessQueue(MQQueueManager queueManager, string Mode){} /// écrire un message dans la file public bool putTheMessageIntoQueue(MQQueue queue, string message){ } /// écrire un message dans la file en spécifiant un identifiant public bool putTheMessageIntoQueueWithId(MQQueue queue, string message, string IdMessage){ } /// lecture des messages de la MQ + dépilation, MQ FIFO --> renvoi un string avec (dep= true) pour lecture avec dépilation /// (dep = false) pour lecture sans dépilation public string GetMessageFromTheQueue(MQQueue queue, bool dep){} /// Liste tous les messages d'une file donnée avec ou sans dépilation public string ListAllMessageFromTheQueue(MQQueue queue, bool dep){} /// recherche d'un message avec son identifiant , si dep=true on retourne le message est on l'enlève de la pile public string BrowseMessageFromTheQueue(MQQueue queue,byte[] IdMessage, bool dep){} /// Convertir un String en un tableau de bytes public static byte[] StringToByteArray(string str){} /// Convertis un tableau de byte en string public static string ByteArrayToString(byte[] dBytes){} /// Convertir String en Hexa public static string StringToHex(string sChaineAConvertir){} cette Classe nécessite la dll d'IBM que vous pouvez telecharger <a href="http://ilyesdj.site.voila.fr/amqmdnet.dll">i ci</a> et ajouter comme reference dans votre projet <http://ilyesdj.site.voila.fr/amqmdnet.dll> pour pouvoir visualiser vos file MQ Series, vous pouvez utilisez ce soft : http://ilyesdj.site.voila.fr/MQJExplorer.zip vous devez nécessairement connaitre les paramètre de vos MQ géré, et instancier la variable d'environnement MQSERVER par la valeur SYSTEM.DEF.SVRCONN/TCP/VOTRE_QUEUE_MANAGER_NAME à bon entendeur Jebabli ilyes
Source
- using System;
- using System.IO;
- using System.Text;
- using IBM.WMQ;
-
- namespace MQManager
- {
- /// <summary>
- /// Description résumée de mqp.
- /// </summary>
- public class MQManagerClass
- {
- MQQueueManager queueManager;
- MQQueue queue;
- MQMessage queueMessage;
- MQPutMessageOptions queuePutMessageOptions;
- MQGetMessageOptions queueGetMessageOptions;
-
- public string QueueName;
- public string QueueManagerName;
- public string ChannelInfo;
- public string transportType,connectionName,channelName;
- public string MSGERROR;
-
-
-
- /// <summary>
- /// Constructeur de la classe MQManagerClass qui contient les attributs de notre MQ
- /// </summary>
- /// <param name="sQueueName"></param>
- /// <param name="sQueueManagerName"></param>
- /// <param name="sChannelInfo"></param>
- public MQManagerClass(string sQueueName,string sQueueManagerName,string sChannelInfo)
- {
- char[] separator = {'/'};
- string[] ChannelParams;
-
- QueueName = sQueueName;
- QueueManagerName = sQueueManagerName;
- ChannelInfo = sChannelInfo;
-
-
- ChannelParams = ChannelInfo.Split( separator );
- channelName = ChannelParams[0];
- transportType = ChannelParams[1];
- connectionName = ChannelParams[2];
- }
-
-
-
- /// <summary>
- /// Connection et renvois un pointeur sur la queue
- /// </summary>
- /// <returns></returns>
- public MQQueueManager ConnectQueue(MQManagerClass mqtest)
- {
- try
- {
-
- //Create a connection to the queue manager
-
- queueManager = new MQQueueManager(mqtest.QueueManagerName, mqtest.channelName, mqtest.connectionName);
- return queueManager;
- }
- catch (MQException ex)
- {
- MSGERROR = ex.ReasonCode +"-"+ ex.Message;
- try
- {
- if (queueManager != null)
- queueManager.Disconnect();
- }
- catch (MQException mqexp)
- {
- MSGERROR = mqexp.ReasonCode +"-"+ mqexp.Message;
- return null;
- }
- return null;
- }
- }
-
-
-
- /// <summary>
- /// determine si on a un accees à la queue et renvoi un objet de la classe MQQueue si oui, sinon null
- /// +spécification des options pour l'accès à la queue
- /// </summary>
- /// <returns></returns>
- public MQQueue MQ_AccessQueue(MQQueueManager queueManager, string Mode)
- {
- int options ;
- if(Mode == "R")
- options = MQC.MQOO_BROWSE + MQC.MQOO_INQUIRE+ MQC.MQOO_FAIL_IF_QUIESCING + MQC.MQOO_INPUT_SHARED; //options d'ouverture de la queue en mode lecture et browse
- else //Mode W
- options = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING; //option d'écriture
-
- try
- {
- queue = queueManager.AccessQueue(QueueName, options);
- return queue;
- }
- catch(MQException mqexp)
- {
- MSGERROR = mqexp.ReasonCode +"-"+ mqexp.Message;
- return null;
- }
- }
-
-
- /// <summary>
- /// écrire un message dans la file
- /// </summary>
- /// <param name="queue"></param>
- /// <param name="message"></param>
- /// <returns></returns>
- public bool putTheMessageIntoQueue(MQQueue queue, string message)
- {
-
- try
- {
- queueMessage = new MQMessage();
- queueMessage.WriteString( message );
-
- queueMessage.Format = MQC.MQFMT_STRING;
- queuePutMessageOptions = new MQPutMessageOptions();
- //queueMessage.MessageId = StringToByteArray(System.Console.ReadLine());
- //ecrire le message dans la queue
- queue.Put( queueMessage, queuePutMessageOptions );
- return true;
- //Console.WriteLine("Success fully entered the message into the queue");
- }
- catch(MQException mqexp)
- {
- MSGERROR = mqexp.ReasonCode +"-"+ mqexp.Message;
- return false;
- }
- }
-
- /// <summary>
- /// écrire un message dans la file en spécifiant un identifiant
- /// </summary>
- /// <param name="queue"></param>
- /// <param name="message"></param>
- /// <param name="IdMessage"></param>
- /// <returns></returns>
- public bool putTheMessageIntoQueueWithId(MQQueue queue, string message, string IdMessage)
- {
-
- try
- {
- queueMessage = new MQMessage();
- queueMessage.WriteString( message );
-
- queueMessage.Format = MQC.MQFMT_STRING;
- queuePutMessageOptions = new MQPutMessageOptions();
- queueMessage.MessageId = StringToByteArray(IdMessage);
- //ecrire le message dans la queue
- queue.Put( queueMessage, queuePutMessageOptions );
- return true;
- //Console.WriteLine("Success fully entered the message into the queue");
- }
- catch(MQException mqexp)
- {
- MSGERROR = mqexp.ReasonCode +"-"+ mqexp.Message;
- return false;
- }
- }
-
-
-
- /// <summary>
- /// lecture des messages de la MQ + dépilation, MQ FIFO --> renvoi un string avec (dep= true) pour lecture avec dépilation
- /// (dep = false) pour lecture sans dépilation
- /// </summary>
- /// <param name="queue"></param>
- /// <param name="queue">dep</param>
- /// <returns></returns>
- public string GetMessageFromTheQueue(MQQueue queue, bool dep)
- {
-
- queueMessage = new MQMessage();
- queueMessage.Format = MQC.MQFMT_STRING;
- queueGetMessageOptions = new MQGetMessageOptions();
-
- if(!dep)
- queueGetMessageOptions.Options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST;
-
- try
- {
- queue.Get( queueMessage, queueGetMessageOptions );
- // Message recu.
- return queueMessage.ReadString(queueMessage.MessageLength);
-
- }
- catch (MQException MQExp)
- {
- // report the error
- MSGERROR = MQExp.ReasonCode +"-"+ MQExp.Message;
- return "";
- }
- }
-
-
- /// <summary>
- /// Liste tous les messages d'une file donnée avec ou sans dépilation
- /// </summary>
- /// <param name="queue"></param>
- /// <param name="dep"></param>
- /// <returns></returns>
- public string ListAllMessageFromTheQueue(MQQueue queue, bool dep)
- {
- bool done = false;
- string all_message="";
-
- queueMessage = new MQMessage();
- queueMessage.Format = MQC.MQFMT_STRING;
- queueGetMessageOptions = new MQGetMessageOptions();
- queueGetMessageOptions.Options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST;
-
-
- do
- {
- try
- {
-
- queueMessage.ClearMessage();
- queueMessage.CorrelationId = MQC.MQCI_NONE;
- queueMessage.MessageId = MQC.MQMI_NONE;
-
-
-
- queue.Get(queueMessage, queueGetMessageOptions);
-
- all_message+= queueMessage.ReadString(queueMessage.MessageLength)+"\n";
-
- if(dep == true)
- {
- queueGetMessageOptions.Options = MQC.MQGMO_MSG_UNDER_CURSOR;
- queue.Get(queueMessage, queueGetMessageOptions);
- }
- queueGetMessageOptions.Options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_NEXT ;
- }
- catch (MQException ex)
- {
-
- MSGERROR = ex.ReasonCode +"-"+ ex.Message;
- done = true;
-
- }
- catch (IOException ex)
- {
- MSGERROR = ex.Message;
- done = true;
- }
-
- } while (!done);
-
- return all_message;
-
-
-
- }
-
-
-
- /// <summary>
- /// recherche d'un message avec son identifiant , si dep=true on retourne le message est on l'enlève de la pile
- /// </summary>
- /// <param name="IdMessage"></param>
- public string BrowseMessageFromTheQueue(MQQueue queue,byte[] IdMessage, bool dep)
- {
- bool done = false;
- int lengthIdMessage = StringToHex(ByteArrayToString(IdMessage)).Length;
- queueMessage = new MQMessage();
- queueMessage.Format = MQC.MQFMT_STRING;
- queueGetMessageOptions = new MQGetMessageOptions();
- queueGetMessageOptions.Options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST;
-
-
- do
- {
- try
- {
-
- queueMessage.ClearMessage();
- queueMessage.CorrelationId = MQC.MQCI_NONE;
- queueMessage.MessageId = MQC.MQMI_NONE;
-
-
- queue.Get(queueMessage, queueGetMessageOptions);
- String msg = queueMessage.ReadString(queueMessage.MessageLength);
-
- int lengtMessageIdMQ = StringToHex(ByteArrayToString(queueMessage.MessageId)).Length;
-
- if(StringToHex(ByteArrayToString(queueMessage.MessageId)) == StringToHex(ByteArrayToString(IdMessage)).PadRight(lengtMessageIdMQ,'0'))
- {
- if(dep == true)
- {
- queueGetMessageOptions.Options = MQC.MQGMO_MSG_UNDER_CURSOR;
- queue.Get(queueMessage, queueGetMessageOptions);
- }
- return msg;
- }
-
- queueGetMessageOptions.Options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_NEXT;
- }
- catch (MQException ex)
- {
-
- MSGERROR = ex.ReasonCode +"-"+ ex.Message;
- done = true;
- return "";
- }
- catch (IOException ex)
- {
- MSGERROR = ex.Message;
- done = true;
- return "";
- }
-
- } while (!done);
-
- return "";
-
-
-
- }
-
- /// <summary>
- /// Convertir un String en un tableau de bytes
- /// </summary>
- /// <param name="str"></param>
- /// <returns></returns>
- public static byte[] StringToByteArray(string str)
- {
- System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding();
- return encoding.GetBytes(str);
- }
-
- /// <summary>
- /// Convertis un tableau de byte en string
- /// </summary>
- /// <param name="dBytes"></param>
- /// <returns></returns>
- public static string ByteArrayToString(byte[] dBytes)
- {
- System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
- return enc.GetString(dBytes);
- }
-
-
- /// <summary>
- /// Convertir String en Hexa
- /// </summary>
- /// <param name="sChaineAConvertir"></param>
- /// <returns></returns>
- public static string StringToHex(string sChaineAConvertir)
- {
-
- byte[] bytes = Encoding.ASCII.GetBytes(sChaineAConvertir.ToCharArray());
-
-
-
-
-
- char[] charArray = { 'Ç', 'ü', 'ä', 'Ö', 'ö', 'Ü', 'Ä', 'é' , 'â' , 'à', 'ç', 'ê', 'ë', 'è'};
- int[] charArrayAsciiExt = { 128, 129, 132, 153, 148, 154, 142,130, 131, 133, 135, 136, 137 , 138};
-
- char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7','8', '9', 'A', 'B', 'C', 'D', 'E', 'F',};
- char[] chars = new char[bytes.Length * 2];
-
-
- for (int i = 0; i < bytes.Length; i++)
- {
- int b = bytes[i];
-
- if(b == 63)//c'est un caractère special avec trème
- {
- for(int j=0;j<charArray.Length;j++)
- {
- if(sChaineAConvertir[i] == charArray[j])
- b = charArrayAsciiExt[j];
- }
- }
-
- chars[i * 2] = hexDigits[b >> 4];
- chars[i * 2 + 1] = hexDigits[b & 0xF];
- }
-
- return new string(chars);
- }//StringToHex
-
-
- }
- }
using System;
using System.IO;
using System.Text;
using IBM.WMQ;
namespace MQManager
{
/// <summary>
/// Description résumée de mqp.
/// </summary>
public class MQManagerClass
{
MQQueueManager queueManager;
MQQueue queue;
MQMessage queueMessage;
MQPutMessageOptions queuePutMessageOptions;
MQGetMessageOptions queueGetMessageOptions;
public string QueueName;
public string QueueManagerName;
public string ChannelInfo;
public string transportType,connectionName,channelName;
public string MSGERROR;
/// <summary>
/// Constructeur de la classe MQManagerClass qui contient les attributs de notre MQ
/// </summary>
/// <param name="sQueueName"></param>
/// <param name="sQueueManagerName"></param>
/// <param name="sChannelInfo"></param>
public MQManagerClass(string sQueueName,string sQueueManagerName,string sChannelInfo)
{
char[] separator = {'/'};
string[] ChannelParams;
QueueName = sQueueName;
QueueManagerName = sQueueManagerName;
ChannelInfo = sChannelInfo;
ChannelParams = ChannelInfo.Split( separator );
channelName = ChannelParams[0];
transportType = ChannelParams[1];
connectionName = ChannelParams[2];
}
/// <summary>
/// Connection et renvois un pointeur sur la queue
/// </summary>
/// <returns></returns>
public MQQueueManager ConnectQueue(MQManagerClass mqtest)
{
try
{
//Create a connection to the queue manager
queueManager = new MQQueueManager(mqtest.QueueManagerName, mqtest.channelName, mqtest.connectionName);
return queueManager;
}
catch (MQException ex)
{
MSGERROR = ex.ReasonCode +"-"+ ex.Message;
try
{
if (queueManager != null)
queueManager.Disconnect();
}
catch (MQException mqexp)
{
MSGERROR = mqexp.ReasonCode +"-"+ mqexp.Message;
return null;
}
return null;
}
}
/// <summary>
/// determine si on a un accees à la queue et renvoi un objet de la classe MQQueue si oui, sinon null
/// +spécification des options pour l'accès à la queue
/// </summary>
/// <returns></returns>
public MQQueue MQ_AccessQueue(MQQueueManager queueManager, string Mode)
{
int options ;
if(Mode == "R")
options = MQC.MQOO_BROWSE + MQC.MQOO_INQUIRE+ MQC.MQOO_FAIL_IF_QUIESCING + MQC.MQOO_INPUT_SHARED; //options d'ouverture de la queue en mode lecture et browse
else //Mode W
options = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING; //option d'écriture
try
{
queue = queueManager.AccessQueue(QueueName, options);
return queue;
}
catch(MQException mqexp)
{
MSGERROR = mqexp.ReasonCode +"-"+ mqexp.Message;
return null;
}
}
/// <summary>
/// écrire un message dans la file
/// </summary>
/// <param name="queue"></param>
/// <param name="message"></param>
/// <returns></returns>
public bool putTheMessageIntoQueue(MQQueue queue, string message)
{
try
{
queueMessage = new MQMessage();
queueMessage.WriteString( message );
queueMessage.Format = MQC.MQFMT_STRING;
queuePutMessageOptions = new MQPutMessageOptions();
//queueMessage.MessageId = StringToByteArray(System.Console.ReadLine());
//ecrire le message dans la queue
queue.Put( queueMessage, queuePutMessageOptions );
return true;
//Console.WriteLine("Success fully entered the message into the queue");
}
catch(MQException mqexp)
{
MSGERROR = mqexp.ReasonCode +"-"+ mqexp.Message;
return false;
}
}
/// <summary>
/// écrire un message dans la file en spécifiant un identifiant
/// </summary>
/// <param name="queue"></param>
/// <param name="message"></param>
/// <param name="IdMessage"></param>
/// <returns></returns>
public bool putTheMessageIntoQueueWithId(MQQueue queue, string message, string IdMessage)
{
try
{
queueMessage = new MQMessage();
queueMessage.WriteString( message );
queueMessage.Format = MQC.MQFMT_STRING;
queuePutMessageOptions = new MQPutMessageOptions();
queueMessage.MessageId = StringToByteArray(IdMessage);
//ecrire le message dans la queue
queue.Put( queueMessage, queuePutMessageOptions );
return true;
//Console.WriteLine("Success fully entered the message into the queue");
}
catch(MQException mqexp)
{
MSGERROR = mqexp.ReasonCode +"-"+ mqexp.Message;
return false;
}
}
/// <summary>
/// lecture des messages de la MQ + dépilation, MQ FIFO --> renvoi un string avec (dep= true) pour lecture avec dépilation
/// (dep = false) pour lecture sans dépilation
/// </summary>
/// <param name="queue"></param>
/// <param name="queue">dep</param>
/// <returns></returns>
public string GetMessageFromTheQueue(MQQueue queue, bool dep)
{
queueMessage = new MQMessage();
queueMessage.Format = MQC.MQFMT_STRING;
queueGetMessageOptions = new MQGetMessageOptions();
if(!dep)
queueGetMessageOptions.Options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST;
try
{
queue.Get( queueMessage, queueGetMessageOptions );
// Message recu.
return queueMessage.ReadString(queueMessage.MessageLength);
}
catch (MQException MQExp)
{
// report the error
MSGERROR = MQExp.ReasonCode +"-"+ MQExp.Message;
return "";
}
}
/// <summary>
/// Liste tous les messages d'une file donnée avec ou sans dépilation
/// </summary>
/// <param name="queue"></param>
/// <param name="dep"></param>
/// <returns></returns>
public string ListAllMessageFromTheQueue(MQQueue queue, bool dep)
{
bool done = false;
string all_message="";
queueMessage = new MQMessage();
queueMessage.Format = MQC.MQFMT_STRING;
queueGetMessageOptions = new MQGetMessageOptions();
queueGetMessageOptions.Options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST;
do
{
try
{
queueMessage.ClearMessage();
queueMessage.CorrelationId = MQC.MQCI_NONE;
queueMessage.MessageId = MQC.MQMI_NONE;
queue.Get(queueMessage, queueGetMessageOptions);
all_message+= queueMessage.ReadString(queueMessage.MessageLength)+"\n";
if(dep == true)
{
queueGetMessageOptions.Options = MQC.MQGMO_MSG_UNDER_CURSOR;
queue.Get(queueMessage, queueGetMessageOptions);
}
queueGetMessageOptions.Options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_NEXT ;
}
catch (MQException ex)
{
MSGERROR = ex.ReasonCode +"-"+ ex.Message;
done = true;
}
catch (IOException ex)
{
MSGERROR = ex.Message;
done = true;
}
} while (!done);
return all_message;
}
/// <summary>
/// recherche d'un message avec son identifiant , si dep=true on retourne le message est on l'enlève de la pile
/// </summary>
/// <param name="IdMessage"></param>
public string BrowseMessageFromTheQueue(MQQueue queue,byte[] IdMessage, bool dep)
{
bool done = false;
int lengthIdMessage = StringToHex(ByteArrayToString(IdMessage)).Length;
queueMessage = new MQMessage();
queueMessage.Format = MQC.MQFMT_STRING;
queueGetMessageOptions = new MQGetMessageOptions();
queueGetMessageOptions.Options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST;
do
{
try
{
queueMessage.ClearMessage();
queueMessage.CorrelationId = MQC.MQCI_NONE;
queueMessage.MessageId = MQC.MQMI_NONE;
queue.Get(queueMessage, queueGetMessageOptions);
String msg = queueMessage.ReadString(queueMessage.MessageLength);
int lengtMessageIdMQ = StringToHex(ByteArrayToString(queueMessage.MessageId)).Length;
if(StringToHex(ByteArrayToString(queueMessage.MessageId)) == StringToHex(ByteArrayToString(IdMessage)).PadRight(lengtMessageIdMQ,'0'))
{
if(dep == true)
{
queueGetMessageOptions.Options = MQC.MQGMO_MSG_UNDER_CURSOR;
queue.Get(queueMessage, queueGetMessageOptions);
}
return msg;
}
queueGetMessageOptions.Options = MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_NEXT;
}
catch (MQException ex)
{
MSGERROR = ex.ReasonCode +"-"+ ex.Message;
done = true;
return "";
}
catch (IOException ex)
{
MSGERROR = ex.Message;
done = true;
return "";
}
} while (!done);
return "";
}
/// <summary>
/// Convertir un String en un tableau de bytes
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static byte[] StringToByteArray(string str)
{
System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding();
return encoding.GetBytes(str);
}
/// <summary>
/// Convertis un tableau de byte en string
/// </summary>
/// <param name="dBytes"></param>
/// <returns></returns>
public static string ByteArrayToString(byte[] dBytes)
{
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
return enc.GetString(dBytes);
}
/// <summary>
/// Convertir String en Hexa
/// </summary>
/// <param name="sChaineAConvertir"></param>
/// <returns></returns>
public static string StringToHex(string sChaineAConvertir)
{
byte[] bytes = Encoding.ASCII.GetBytes(sChaineAConvertir.ToCharArray());
char[] charArray = { 'Ç', 'ü', 'ä', 'Ö', 'ö', 'Ü', 'Ä', 'é' , 'â' , 'à', 'ç', 'ê', 'ë', 'è'};
int[] charArrayAsciiExt = { 128, 129, 132, 153, 148, 154, 142,130, 131, 133, 135, 136, 137 , 138};
char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7','8', '9', 'A', 'B', 'C', 'D', 'E', 'F',};
char[] chars = new char[bytes.Length * 2];
for (int i = 0; i < bytes.Length; i++)
{
int b = bytes[i];
if(b == 63)//c'est un caractère special avec trème
{
for(int j=0;j<charArray.Length;j++)
{
if(sChaineAConvertir[i] == charArray[j])
b = charArrayAsciiExt[j];
}
}
chars[i * 2] = hexDigits[b >> 4];
chars[i * 2 + 1] = hexDigits[b & 0xF];
}
return new string(chars);
}//StringToHex
}
}
Conclusion
pour plus d'information, veuillez me laisser des messages. merci
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
POUR NIX : Plantages sur le site [ par zenorby ]
Tout d'abord bravo pour votre site qui est une mine de renseignements.Je viens d'essayer de consulter des CV sur emploi.devfr.com et malheureusement à
MAPI et C# [ par LeHulk ]
Nous sommes en train d'essayer de récupérer les données stockées dansexchange.Le langage de programmation que nous utilisons est le C#.Avec les différ
Récupération d'UN seul message [ par LeHulk ]
Bonjour,Nous créons une application qui doit récupérer des données stockées dans Exchange. Nous travaillons avec les objet MAPI. Nous arrivons à nous
deserialisation d'un flux XML avec plusieurs namespaces [ par sesques ]
Bonjour,Sans parler de Service Web car je n'utilise pas SOAP, je veux utiliser la classe XmlSerializer pour exploiter un flux XML entrant sur du HTTP.
message de confirmation avec une windows form [ par Thanos_the_yopper ]
Salutje fais une appli avec des fenetres windows et j'aimerais savoir comme faire pour faire apparaitre un message de confirmation (genre "etes-vous s
message de confirmation avec plusieurs réponse possible [ par Thanos_the_yopper ]
j'aurais voulu faire un message de confirmation (genre une fenetre oui/non), mais avec les libellé que je veux dans les boutons (genre 3 boutons avec
Ouvrir la boîte de dialogue de nouveau message d'Outlook [ par Gabberzorus ]
Quelqu'un saurait-il me dire comment je peux ouvrir la boîte de dialogue d'envoi de message d'Outlook en passant l'adresse du destinataire en argument
Pb d'affichage de fenetre et thread... [ par bigflo ]
Salut,Je developpe un client de tchat en c#.Mais j'ai quelque pb d'affichage des fenetres de tchat. Explication:Bon, j'ai une treeview et lorsque je d
Erreur de serveur [ par totodude ]
Bonjour tout le monde,j'ai dans une application une erreur du serveur.Voici les 2 premières lignes de la trace de ma pile.[IndexOutOfRangeException:
Lancer une application... [ par Yandroide ]
Salut, Je voudrais pouvoir lancer une appli externe à mon application. Je réussi à le faire avec Process.start... Mon problème est de pouvoir afficher
|
Derniers Blogs
[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|