Kategori: .NeT 2008

BizTalk Server Tracking Database’i Kod İle Sorgulamak

Şubat 25th, 2010

Biztalk Administration Console olmadan, DB ye bakmak suretiyle Biztalk dan gelip geçen mesajları görmeniz pek mümkün olmamaktadır.
DB’yi ne kadar kurcalarsanız kurcalayın, Table lardaki bilgilerin (TrackingDB deki) anlamsız (okunamaz) durumda olduğunu göreceksiniz.

Peki Örneğin Bir Web Service veya Bir Web Sayfasında, Biztalk Server üzerinden gelip geçen mesajları ve mesajların içeriklerini nasıl gösterebiliriz?

Kullanabileceğiniz Metodlar Şöyle :

usings;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using Operations = Microsoft.BizTalk.Operations;
using Microsoft.BizTalk.Message.Interop;
using System.IO;
using System.Globalization;
using System.Collections.ObjectModel;

Altı çizili olan dll leri Biztalk un kurulduğu dizin içerisinde bulabilirsiniz;

Definitions;

private string TrackingServer = "Biztalk SQL Server";
private string TrackingDB = "DTA DB";

Biztalk SQL Server : Biztalk Server ın DB sinin bulunduğu server (local vs olabilir).
DTA DB : Tracking DB nizin adı, değiştirmediyseniz BiztalkDTAdb olmalı.

GetServiceMessages Metodu;

public Collection<BTMsgInstance> GetServiceMessages(string ServiceInstanceId)
{
Collection<BTMsgInstance> collection = new Collection<BTMsgInstance>();
Operations.BizTalkOperations ops = new Microsoft.BizTalk.Operations.BizTalkOperations();
Operations.TrackingDatabase tdb = new Microsoft.BizTalk.Operations.TrackingDatabase(TrackingDB, TrackingServer);
Operations.MessageFlow flow = ops.GetMessageFlow(new Guid(ServiceInstanceId), tdb);
foreach (Operations.MessageEvent message in flow.MessageEvents)
{
BTMsgInstance instance = new BTMsgInstance
{
EndTime = message.RoutingDetails.Source.EndTime,
StartTime = message.RoutingDetails.Source.StartTime,
InstanceID= message.RoutingDetails.Source.InstanceID,
ErrorInfo = message.RoutingDetails.Source.ErrorInfo,
ExitCode = message.RoutingDetails.Source.ExitCode,
ServiceName = message.RoutingDetails.Source.ServiceName
};
collection.Add(instance);
}
return collection;
}

GetTrackedMessageData Metodu;

public string GetTrackedMessageData(string MessageInstanceId)
{
Operations.BizTalkOperations ops = new Microsoft.BizTalk.Operations.BizTalkOperations();
Operations.TrackingDatabase tdb = new Microsoft.BizTalk.Operations.TrackingDatabase(TrackingDB, TrackingServer);

Guid guid = new Guid(MessageInstanceId);
IBaseMessage trackedMessage = ops.GetTrackedMessage(guid);
IBaseMessagePart part = trackedMessage.BodyPart;
Stream stream = part.Data;
StreamReader reader = new StreamReader(stream);
return string.Format(CultureInfo.CurrentCulture, "0", new object[] { reader.ReadToEnd() });
}

Unutmadan yukarıdaki kodun çalışması için Biztalk Server üzerinde bir IIS’ e kurmanızı öneririm, zira kodlar yetki ile ilgili problemlerden dolayı çalışmayabilirler. Bu yüzden bu metodları bir web service olarak hazırlamanız en iyisi olacaktır. Daha sonra yapacağınız ayrı bir web uygulaması ile de bu metodları çağırıp gerekli bilgileri alabilirsiniz.

GetServiceMessages metodu, Bir servisin Instance ID sini input olarak alır ve BTMsgInstance sınıfında bir değişken döndürür. Bunun içinde EndTime, StartTime, InstaceID, ErrorInfo, ExitCode, ServiceName gibi bilgiler bulunmaktadır.

GetTracketMessageData metodu ise Message Instance ID si verilen bir mesajın içeriğini XML olarak bize döndürür.

Bu kadar bilgiden sonra lan olm iyi güzelde ServiceName ve ServiceInstanceID lerini nereden bulacam da bu metodlara gönderip sonuçları alacam diyebilirsiniz. Demelisiniz de :)

Onu da düşündüm, onu da anlatıcam size :)

ServiceName leri bulabilmek için aşağıdaki SQL i çalıştırıyoruz,

SELECT DISTINCT sf.[Service/Name] AS [Service Name]
FROM [dtav_ServiceFacts]  sf
WHERE sf.[Service/Name] IS NOT NULL;

ServiceInstanceID leri bulabilmek için de aşağıdaki SQL e, ServiceName gönderiyoruz

SELECT sf.[Service/Name] AS [Service Name], sf.[ServiceInstance/InstanceId] AS [Service Instance Id]
FROM [dtav_ServiceFacts]  sf
WHERE sf.[Service/Name] = '" + serviceName + "'
ORDER BY sf.[ServiceInstance/StartTime] DESC

Daha da detaylı bilgi gerekirse dtav_ServiceFacts tablosundaki verileri inceleyebilirsiniz.

Son 10 mesajın Bilgilerini getiren SQL;

SELECT TOP 10
sf.[ServiceInstance/InstanceId] AS [Service Instance Id],
sf.[Service/Name] AS [Service Name], sf.[ServiceInstance/State] AS [State] ,
dateadd(minute, 180, sf.[ServiceInstance/StartTime]) AS [Start Time],
dateadd(minute, 180, sf.[ServiceInstance/EndTime]) AS [End Time],
sf.[ServiceInstance/Duration] AS [Duration],
sf.[ServiceInstance/ExitCode] AS [Error Code],
FROM [dtav_ServiceFacts]  sf
WHERE sf.[Service/Name] IS NOT NULL
AND  sf.[Service/Type]='Orchestration'
ORDER BY [Start Time] DESC

Tags: , , , , , , , , , , , ,
Posted in .NeT 2008, Bilgisayar, BizTalk | No Comments »

HTML de TIF (TIFF) gösterimi

Şubat 25th, 2010

Bildiğiniz gibi tif dosyaları normal resim gibi gösterilememektedir. Biraz araştırma yaptıktan sonra çoğu sitede böyle bir imkanın olmadığını, sadece operanın böyle bir özelliğe sahip olduğunu ve tif dosyalarını gösterebildiğini gördüm;

Yanlış :)

Yapmanız gerekenler ;

  1. Aşağıdaki linkten, tifleri görüntüleyebilmek için alternatiff adlı plugini indiriyoruz,
    link : http://www.alternatiff.com/distribution
  2. Sıkıştırılmış dosyanın içindeki install.bat dosyasını çalıştırarak ocx dosyasını register ediyoruz,
  3. Daha sonra ise, aşağıdaki kodu kullanarak sayfada gösterimi sağlayabilirsiniz
  4. <object width=200 height=200
      classid="CLSID:106E49CF-797A-11D2-81A2-00E02C015623">
     <param name="src" value="tiffdocument.tif">
     <param name="negative" value="yes">
    </object>

Tags: , , , ,
Posted in .NeT 2008, Yazılım | No Comments »

MP3 ID3 Changer

Şubat 20th, 2010

çook basit ama arayıpda bulunamayan programlardandır bu :)
ben de MP3 lerin ID3 taglerini değiştiren basit ama düzgün çalışan bir uygulama aradım, fakat bulamadım. Ulen ben yazarım dedim sonra,
ahada yazdım, isteyen olursa kullanabilir, Kullandıkça beni hatırlarsınız…

Ekran Görüntüsü :

MP3 ID3 Changer

Download :
ID3Changer

Kullanımı :

  1. Programı Çalıştırıyoruz;
  2. Load MP3 butonuna tıklıyoruz;
  3. Değişiklik yapmak istediğimiz dosya veya dosyaları seçip Open butonuna tıklıyoruz;
  4. Sol taraftaki listeden istediğimiz şarkıyı seçiyoruz;
  5. Sağ taraftan ise ID3 bilgilerini güncelleyip Save butonuna tıklıyoruz.

Tags: , , , , , ,
Posted in .NeT 2008, Yazılım | 2 Comments »

Tek Satırlık İf Komutu

Ağustos 27th, 2009

Hep unutuyorum not alayım belki sizin de işinize yarar :)

string a = (textBox1.Text.Equals("ssss")) ? "Eşit" : "Yanlış";

Tags: ,
Posted in .NeT 2008 | 2 Comments »

DataTable Sort

Temmuz 12th, 2009
private DataTable SrtDataTable(DataTable dt, string sort)
{
DataTable newDT = dt.Clone();
int rowCount = dt.Rows.Count;

DataRow[] foundRows = dt.Select(null, sort);
for (int i = 0 ; i < rowCount; i++)
{
object[] arr = new object[dt.Columns.Count];
for (int j = 0; j < dt.Columns.Count; j++)
{
arr[j]=foundRows[i][j];
}
DataRow data_row = newDT.NewRow();
data_row.ItemArray=arr;
newDT.Rows.Add(data_row);
}

dt.Rows.Clear();

for(int i = 0; i < newDT.Rows.Count; i++)
{
object[] arr = new object[dt.Columns.Count];
for (int j = 0; j < dt.Columns.Count; j++)
{
arr[j]=newDT.Rows[i][j];
}

DataRow data_row = dt.NewRow();
data_row.ItemArray = arr;
dt.Rows.Add(data_row);
}
return dt;
}

Yeah, this is not my code :)

I found it, here

Tags: ,
Posted in .NeT 2008 | No Comments »

Google Translate Kullanarak .NeT de Dil Çevrimi

Mart 2nd, 2009

Merhabalar!

—————————————————————————————-
Dikkat!!!!

Eğer İnternet çıkışınız sabit (static) ip ise, mümkün olduğu kadar bu kodu çok kullanmamaya çalışın. Google aynı ipden çok fazla sorgu tespit ederse, kendisine zarar verilmeye çalışıldığını zannedip, ipnizi engelleyebilir.

—————————————————————————————-


Google Translate
‘in nimetlerinden faydalanmak ister misiniz?? Elbette istersiniz, hazırladığınız bir uygulamada, kendi sitenizde, internete çıkışı olan herhangi bir sistemde bundan seve seve faydalanabilirsiniz. Google Translate sayesinde babylon gibi paralı çeviri hizmetlerinin benzerlerini, çok kolay bir şekilde kendiniz hazırlayabilirsiniz.

Benim sayfa tasarımım aşağıdaki gibi oldu.

dil1

dil2

dil3

Şu anda mevcut bulunan diller ve kodları aşağıdadır: (Bunlar Kaynak dil ve Hedef dil tespitinde kullanılıyor. Google’ a resource gönderirken çevrilecek olan kelime veya cümle ve tr|en gibisinden bir ifade gönderiliyor. Bu Türkçeden İngilizceye anlamına gelmekte…)

  1. Almanca – de
  2. Arapça – ar
  3. Bulgarca – bg
  4. Çekoslavakça – cs
  5. Çince (Basit) – zh-CN
  6. Çince (Karmaşık) – zh-TW
  7. Danca – da
  8. Fince – fi
  9. Fransızca – fr
  10. Hırvatça – hr
  11. Hintçe – hi
  12. Hollandaca – nl
  13. İngilizce – en
  14. İspanyolca – es
  15. İsveççe – sv
  16. İtalyanca – it
  17. Japonce – ja
  18. Korece – ko
  19. Norveççe – no
  20. Polonca – pl
  21. Portekizce – pt
  22. Romanca – ro
  23. Rusça – ru
  24. Türkçe – tr
  25. Yunanca – el

Kodun tasarımı aşağıdaki gibi, bunu kendinize göre düzenleyebilirsiniz.

Tanımlamalar :

        protected Label label;
        protected TextBox textBox;
        protected DropDownList LangFrom;
        protected DropDownList LangTo;
        protected Button buton;

Butonun Tıklanma Eventı :

        void buton_Click(object sender, EventArgs e)
        {
            try
            {
                string fromto = LangFrom.SelectedValue + "|" + LangTo.SelectedValue;
                string sonuc = TranslateText(textBox.Text, fromto);
                label.Text = sonuc;
            }
            catch (Exception ex)
            {
                label.Text = ex.Message;
            }
        }

Translate Metodu :

        public string TranslateText(string input, string languagePair)
        {
            try
            {
                string url = string.Format("http://www.google.com/translate_t?hl=en&if=UTF8&text={0}&langpair={1}", input, languagePair);
                WebClient webClient = new WebClient();
                webClient.Encoding = System.Text.Encoding.UTF8;
                string result = webClient.DownloadString(url);
                int dan = result.IndexOf("id=result_box") + 22;
                int da = result.IndexOf("id=result_box") + 500;
                result = result.Substring(dan, da - dan);
                result = result.Substring(2, result.IndexOf("</div") - 2);
                return result;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }

Dilleri Ekle Metodları :

        private void DilleriEkle()
        {
            DilEkle("Almanca", "de");
            DilEkle("Arapça", "ar");
            DilEkle("Bulgarca", "bg");
            DilEkle("Çekoslavakça", "cs");
            DilEkle("Çince (Basit)", "zh-CN");
            DilEkle("Çince (Karmaşık)", "zh-TW");
            DilEkle("Danca", "da");
            DilEkle("Fince", "fi");
            DilEkle("Fransızca", "fr");
            DilEkle("Hırvatça", "hr");
            DilEkle("Hintçe", "hi");
            DilEkle("Hollandaca", "nl");
            DilEkle("İngilizce", "en");
            DilEkle("İspanyolca", "es");
            DilEkle("İsveççe", "sv");
            DilEkle("İtalyanca", "it");
            DilEkle("Japonca", "ja");
            DilEkle("Korece", "ko");
            DilEkle("Norveççe", "no");
            DilEkle("Polonca", "pl");
            DilEkle("Portekizce", "pt");
            DilEkle("Romanca", "ro");
            DilEkle("Rusça", "ru");
            DilEkle("Türkçe", "tr");
            DilEkle("Yunanca", "el");
        }

        private void DilEkle(string p, string p_2)
        {
            LangFrom.Items.Add(p);
            LangFrom.Items[LangFrom.Items.Count - 1].Value = p_2;

            LangTo.Items.Add(p);
            LangTo.Items[LangTo.Items.Count - 1].Value = p_2;
        }

Tags: , , ,
Posted in .NeT 2008, Sharepoint | 6 Comments »

How To Move Selected ListItems to Down in ListBox

Ocak 14th, 2009

Call the metod from OnClick Down Button event;
Code ;

public void MoveDown()
    {
        int startindex = ListBox2.Items.Count - 1;
        for (int i = startindex; i > -1; i--)
        {
            if (ListBox2.Items[i].Selected)
            {
                if (i < startindex && !ListBox2.Items[i + 1].Selected)
                {
                    ListItem bottom = ListBox2.Items[i];
                    ListBox2.Items.Remove(bottom);
                    ListBox2.Items.Insert(i + 1, bottom);
                    ListBox2.Items[i + 1].Selected = true;
                }

            }
        }
    }

Tags: , ,
Posted in .NeT 2008 | No Comments »

How To Move Selected ListItems to Up in ListBox

Ocak 14th, 2009

Call the metod from OnClick Up Button event;
Code ;

public void MoveUp()
    {
        for (int i = 0; i < ListBox2.Items.Count; i++)
        {
            if (ListBox2.Items[i].Selected)
            {
                if (i > 0 && !ListBox2.Items[i - 1].Selected)
                {
                    ListItem bottom = ListBox2.Items[i];
                    ListBox2.Items.Remove(bottom);
                    ListBox2.Items.Insert(i - 1, bottom);
                    ListBox2.Items[i].Value = bottom.Value;
                    ListBox2.Items[i - 1].Selected = true;
                }
            }
        }
    }

Tags: , ,
Posted in .NeT 2008 | No Comments »

Mail Gönderme C# Kodu // Send Mail C# Code

Ocak 14th, 2009

KOD:

        MailMessage mail = new MailMessage();
        public void MailSend(string body, string subject, string strTO)
        {
            mail = new MailMessage();
            mail.To.Add(strTO);
            mail.Subject = subject;
            mail.From = new MailAddress("from@from.com");
            mail.Body = body;
            SmtpClient smtp = new SmtpClient("smtp.server.address");
            smtp.UseDefaultCredentials = true;
            try
            {
                smtp.Send(mail);
            }
            catch (Exception ex)
            {
                //Error
            }
        }

Tags: , ,
Posted in .NeT 2008 | No Comments »

Export DLL From Assembly

Aralık 28th, 2008

GAC Util de bulunan DLL’lerinizi assembly klasörünüzden başka bir klasöre çıkarmak, başka bir makinaya taşımak veya kopyalamak, normal klasörlerdeki benzer işlemlere nazaran çok daha zordur. Herhangi bir dll in üzerine sağ tıklarsanız şekildeki gibi bir ekranla karşılaşırsınız.

assembly

assembly

şekilde de görüldüğü üzere istediğiniz işlemleri bulamayabilirsiniz. CTRL+c ve CTRL+x i denediğinizi görür gibi oluyorum. Fakat bu işlem de işinize yaramayacaktır. Assembly klasörünü başka bir makinaya komple kopyalarsanız, bu işlemle de sadece o makinanın dll lerini kopyalamış olursunuz. Uzun lafın kısası bu iş kolayca olmuyor :)

Uzun Yol ile :

  1. Bir adet command prompt açın,
  2. c:\\Windows\Assembly\GAC veya c:\\Windows\Assembly\GAC_MSIL klasörlerinden birinde istediğiniz DLL dosyasını bulun
  3. Örneğin xyz.dll dosyasını, Gac_MSIL klasöründe bulduk. c:\\Windows\Assembly\GAC_MSIL\xyz\ dizinine gidin, Buradaki xyz dizini, dll adıyla birebir aynıdır.
  4. Daha sonra aşağıdaki şekildeki gibi xyz.dll dosyası Assembly klasöründe bulunur ve dosyanın özelliklerine gidilir.assembly1
  5. Yukarıdaki şekilde altı çizili versiyon ve public key token bilgilerindeki “versiyon__publickeytoken” şeklindeki bir alt klasöre geçilir. Resimdeki DLL için örnek verecek olursak klasör adı : 10.0.4504.0__31bf3856ad364e35  olacaktır.
  6. Son olarak da bu klasör içerisinde “copy xyz.dll c:\xyz.dll” komutula dosyamızı istediğimiz yere kopyalayabiliriz.

Gözünüz korktu di mi :) Düşünün bunlardan en az 200 tanesinin yedeğini almak istediğinizi,

Çözüm Kısa yolumuz :

  1. Basit olarak hazırladığım şu kodu kullanabilirsiniz :
  2. FileStream fs = new FileStream("c:\\dllisimleri.txt", FileMode.Open, FileAccess.Read);
    StreamReader sr = new StreamReader(fs);
    string arguments;
    string read = sr.ReadLine().Trim();
    string read1 = sr.ReadLine().Trim();
    while (read != null)
    {
    Console.WriteLine(read);
    try
    {
    File.Copy("c:\\\\WINDOWS\\assembly\\Gac_MSIL\\" + read + "\\"+read1+"\\" + read + ".DLL", "C:\\\\DLL\\" + read + ".dll");
    
    read = sr.ReadLine().Trim();
    read1 = sr.ReadLine().Trim();
    }
    catch (Exception ex)
    {
    break;
    }
    }
    
  3. dllisimleri.txt dosyasının içeriğini de aşağıdaki gibi yaparsanız, istediğiniz dosyaları hemen alabilirsiniz;
  4. xyz1
    1.0.0.0__916a267ef328a0b9
    xyz2
    1.0.0.0__b715a15ad90d37db
    xyz3
    1.0.0.0__f4df43ff1813a7d4
    xyz4
    1.0.0.0__71e9bce111e9429c

    buradaki xyz, kopyalamak istediğiniz dll dosyalarının ismi (.dll olmadan),
    1.0.0.0__916a267ef328a0b9 bilgilerini de yukarıda anlattığım gibi hazırlayabilirsiniz.

  5. Başka bir kolaylık olarak Gac_MSIL klasörüne girdiğinizde dir /p, komutuyla command prompt dan tüm isimleri tarayabilirsiniz. Bu sayede tek tek kopyalamak zorunda kalmaz, rahatınıza bakarsınız…

Tags: , , ,
Posted in .NeT 2008, Sharepoint | No Comments »