Bir kaç önceki yazılarımdan birinde WMI ile Biztalk üzerinde Suspend durumunda ki mesajlara nasıl ulaşırız bunu anlatmaya çalışmıştım hatırlarsanız. Ucunu biraz açık bırakmıştım açıkcası, uğraşan olur belki falan diye… Ama sanırım çok Biztalk ile bu şekilde uğraşan yok ki pek bir soru gelmedi. (:

Sadece mesaj içeriğini nasıl görüntüleyebiliriz gibi bir soru gelmişti, WMI ile biraz sıkıntılı olduğundan ve itiraf ediyorum biraz da tembel olduğumdan pek uğraşmadım. Ama yine bir proje gereği Biztalk ile haşır neşir olmam gerekti ve bu sefer mesaj içeriklerine ulaşmam gerekiyordu.

Önceki örnekten hatırlarsanız Suspend olan mesajların belli bilgilerine zaten ulaşabiliyorduk. Bu bilgileri kullanarakta bu sefer direk Biztalk’un veritabanlarına ulaşarak mesaj içeriklerine ulaşabiliyoruz.

Umarım bu kısa ve basit çözüm birilerinin işine yarar (:

        public string GetMessageWithSQL(string messageId)
        {
            try
            {
                bizTalkServerAddress = "192.168.1.1";

                //SQL bağlantımızı oluşturuyoruz. Mesaj içeriklerine BiztalkMsgBoxDB veritabanından ulaşabiliriz.
                SqlConnection con = new SqlConnection("Data Source=" + bizTalkServerAddress + ";Initial Catalog=BizTalkMsgBoxDb;Integrated Security=True");
                string message = "";
                try
                {
                    SqlCommand cmd = new SqlCommand();
                    SqlDataReader reader;

                    //Mesaj'ın instance id'si ile MessageParts tablosuna aşağıdaki sorgu ile
                    cmd.CommandText = @"SELECT p.* FROM MessageParts mp
                                        INNER JOIN Parts p on p.uidPartID = mp.uidPartId
                                        WHERE uidMessageID = '" + messageId + "'";
                    cmd.CommandType = CommandType.Text;

                    cmd.Connection = con;
                    con.Open();
                    reader = cmd.ExecuteReader();

                    while (reader.Read())
                    {
                        //imgPart kolonunda binary olarak mesajın içeriği tutulmakta.Bu şekilde ulaşabiliriz.
                        message = System.Text.Encoding.UTF8.GetString((byte[])reader["imgPart"]);

                    }
                }
                catch (Exception ex)
                {
                    message = ex.Message;
                }
                finally
                {
                    con.Close();
                }
                return message.Trim();
            }
            catch (Exception sqlEx)
            {
                return sqlEx.Message;
            }
        }