Tag: xml

Biztalk Error : “Cannot locate document specification because multiple schemas matched the message type” ve Çözümü

Haziran 2nd, 2010

Biztalk Server schemaları root node name + namespace mantığıyla ayırt eder. Eğer İlk node un ismi ve namespace in birleşimi aynı olan birden fazla şemanız mevcutsa bu hatayı alırsınız. Yani Biztalk bu yapıya sahip bir mesaj aldığında hangi şemayı kullanacağını bilemez/karar veremez.

üç tane çözümü mevcuttur (benim bildiğim :))

  1. Aynı yapıya sahip iki şema zaten olmamalıysa, yani yanlışlıkla olmuşsa, gereksiz şemayı silip yeniden deploy edersiniz.
  2. Yanlışlık yoksa ve şemanın ikisini de kullanmanız gerekli ise;
    1. Source mesajın şemasını değiştirebiliyorsanız, yani xml dosyasını üreten programda değişiklik yapabilirseniz, programdan xmlns yi veya root node un ismini değiştirmeniz yeterli olacaktır.c# ile XMLDocument içindeki namespace i (xmlns) aşağıdaki gibi değiştirebilirsiniz;

      XmlDocument xmlDocument = new XmlDocument();
      xmlDocument.Load(“dosyaadi veya var olan XmlDocument kullanılabilir”);
      XmlAttribute attributeNode = xmlDocument.CreateAttribute(“xmlns”, “”, “http://blablabla”);
      xmlDocument.DocumentElement.SetAttributeNode(attri buteNode);

    2. Yukarıdaki çözüm işinize yaramazsa ki kaynak üreten program elinizde değil ise yaramaz. O zaman Biztalk tarafında aşağıdaki özelliklere sahip bir Pipeline üretiyoruz. Daha sonra Receive Location’ınımız pipelinını, yeni yaptığımız pipeline ile değiştiriyoruz. Böylece Biztalk Server, yaratılan pipeline sayesinde hangi schemanın kullanılacağına karar verebilir.Yeni yaptığımız pipeline a bir adet XML Disassembler eklenir.XML Disassembler ın Allow unrecognized messages özelliği true yapılır. Document schemas dan kullanılmak istenilen schema seçilir.

    3. Daha sonra proje deploy edilir ve kullanılacak olan receive locationdan Receive Pipeline olarak yeni yarattığımız pipeline seçilir.

      Test ettiğinizde problemin çözülmüş olduğunu görürsünüz.

Tags: , , , , , , , , , , , , , , , , , ,
Posted in BizTalk | No Comments »

Biztalk 2009 : SQLBinding ? 3 – Mapping

Eylül 14th, 2009

Merhabalar,
Bir önceki makalemizde projemizin schemalarını oluşturmuştuk, Bu makelede ise bu schemaları kullanarak basit bir map yaratacağız. Bu map iki farklı şema arasında verilerin ne şekilde taşınacağını belirlememizi sağlar. Bu sayede normal kodlamada kullanılan XSLT ve XML gibi ciddi yoğun ve gereksiz işlerden, sürükle bırak yaparak kurtulmuş oluyoruz. Oluşturacağımız bu map dosyasını not defteriyle açarsanız neden bahsettiğimi daha iyi anlayabilirsiniz 🙂

  1. Sağ Click -> Add -> New Item yolunu izleyerek aşağıdaki gibi bir map oluşturuyoruz. Ben bu dosyanın ismine Transform_File2SQLRequest dedim. Dilerseniz değiştirebilirsiniz.
  2. orc11

  3. Açılan btm dosyasında, Open Source Schema ya tıklayarak Schemas -> sqlbinding.data yı yani kaynak olan dosya şemamızı seçiyoruz.
  4. Open Destination Schema linkinden ise Schemas -> SQLBinding_InsertTableOperation_dbo_sqlbinding seçilir. Karşımıza bu işlemin türünü soran bir ekran gelecektir. Buradan biz sql e kayıt aktarımı yapacağımız için(gidiş yönlü bir transfer olucak) Insert işlemi seçilir.
  5. Şemalara belirlendikten sonra temel olarak sürükle bırak ile node ları birbirine bağlıyoruz. Bir tek ID bilgili otomatik üretileceği için boş bırakılacak. Mapin olması gereken son halini aşağıdaki resimden görebilirsiniz.
  6. orc13

Bir sonraki makale; Orchestration 🙂

Tags: , , , , , , ,
Posted in BizTalk | No Comments »

Biztalk 2009 : SQLBinding – 1

Eylül 3rd, 2009

Aşağıdaki hazırladığım, WCF-Custom SqlAdapter Bindingi ile ilgili ufak bir örnek bulabilirsiniz;

  1. Bu örnek de xml dosyasında bulunan datalarımızı, bu datalara uygun olarak hazırlanmış olan bir sql server da bir tabloya kaydını gerçekleştireceğiz. Bunun için ilk önce aşağıdaki şekildeki gibi bir sqlbinding isminde bir database oluşturuyorum.
  2. 1

  3. Oluşturduğum tabloya yeni bir tablo ekliyoruz.
  4. 2

  5. Tablo elemanlarını aşağıdaki şekildeki gibi oluşturuyoruz. Buradaki ID alan primary key ve inremental olarak artıyor. Diğer alanlar varchar(50).
  6. 3

  7. Daha sonra visual studio da yeni bir biztalk server 2009 projesi oluşturuyoruz. Ben burada da proje ismine sqlbinding dedim 🙂 Oluşan proje üzerine sağ tıklayıp, Add, Add Generated Items… yolunu izliyoruz.
  8. 4

  9. Generated Schema Files alanından ConsumeAdapterService ı seçip Add butonuna tıklıyoruz.
  10. 6

  11. Select a binding: kısmından sqlBinding seçip Configure… butonuna tıklıyoruz.
  12. 7

  13. Configure Adapter penceresinde, security ayarları tabında, Client credential type Windows seçilir. Eğer sql connection bilgileriniz sql authentication gerektiriyorsa, bu ekranda username, SSO kullanıyorsanız SSO seçebilirsiniz.
  14. 8

  15. URI Properties ekranında bağlantı ayarları yapılır;
    Burada bulunan,

    InitialCatalog : bağlanacağımız db nin ismi (ben ilk olarak db oluştururken ismini sqlbinding vermiştim)
    InstanceName : bağlanacağımız sql serverın istance ismi (bu örnekde benim bir instanceım yok o yüzden boş geçiyorum. Eğer SQLExpress kullanıyorsanız, bu kısma SQLEXPRESS diye instance ismini belirtmeniz gerekir.)
    Server : sql serverın bulunduğu server veya pc. IP veya DNS olabilir. Ben local kullandığım için (.) deyip geçtim.

  16. 9

  17. Ayarları yaptıktan sonra Connect butonuna tıklıyoruz. Bir sorun yok ise aşağıdaki reismdeki gibi Procedures, Tables, vs.. şeklinde sql kategorilerinin gelmesi gerekir.
    Eğer işlemimiz bir procedür üzerinden ilerliyecekse buradan Procedures seçilebilir. Fakat biz sadece ekleme işlemi yapacağımız için Tables tabı seçilir. Operations kısmından ise Ekleme yapacağımız için Insert seçilir ve Add butonuna tıklanır.

    Filename Prefix kısmından oluşacak olan schemalar için (karışıklığı önlemek için) bir ön isim verebilirsiniz. Bu işlem de yapıldıktan sonra Ok butonuna tıklanır ve Biztalk bizim için schemaları otomatik olarak üretir 🙂

  18. 10

  19. SQL şemamızı oluşturduktan sonra sıra XML dosyamızı ve şemasını oluşturmaya geldi. Bunun için aşağıdaki resimdeki gibi, database deki alanlarıma uygun(ki uygun olmasına gerek yok:)) bir XML dosyası oluşturdum. Burada dikkat etmeniz gereken en tepede mutlaka bir root node olması gerekir. Yani ana seviyede çoklu kayıt olamıyor.
  20. 11

  21. Şimdi sıra hazırladığımı XML dosyasının şemasını oluşturmaya geldi. Bunun için yine sağ click -> Add Generated Items a gelinir. Generate Schemas seçilir ve Add butonuna tıklanır.
  22. 12

  23. Document Type kısmından Well-Formed XML, Input file olarak da oluşturduğumuz xml dosyası seçilir ve OK butonuna tıklanır.
  24. 13

bir sonraki postumdan yazı devam edicek…

Tags: , , , , , , , , ,
Posted in Bilgisayar | No Comments »

XSLT Choose

Ağustos 14th, 2009

XSLT Choose Operation :

<xsl:variable name="value" select="//*[local-name()='NODE_NAME']" />
<xsl:choose>
<xsl:when test =  "$value= 'abcxyz'" >
"//*[local-name()='NODE_NAME']" is equal to abcxyz
</xsl:when>
<xsl:otherwise>
Not Equal
</xsl:otherwise>
</xsl:choose>

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

XML ve XSLT Dosyalarını İşleyerek Ekrana HTML Çıktısı Veren ASPX Sayfası

Nisan 15th, 2009

evet mutlaka vardır bu konularla ilgilenen, hoş ben daha benden başkasını görüp duymadım ama neyse 🙂

Elinizde source olarak XML var, XSLT kullanarak bu dosyayı işlemek istiyorsunuz. Bazı yardımcı programlarla testlerini, çıktılarını, görünümü görüp hoşunuza gidiyor. Fakat internete koymak bunu biraz daha kastırıcı 🙂

Şöyleki aşağıdaki gibi bir default.aspx dosyanızın olması gerekli. Ne anlattığımı anlamayanlar, birer adet XML, XSLT ve ASPX dosyası ile db’ siz ek sayfasız muazzam portaller hazırlayabileceklerini düşünsünler. Şimdilik ilk aşama olarak ASPX dosyamızın kaynak kodlarını veriyorum. Fazla zor bir yapısı yok, o yüzden fazla açıklama gereği görmedim, isteyen olursa seve seve anlatabilirim.

Not düşeyim bir de : Buradaki XML ve XSLT dosyaları temel olarak Biztalk Server ın temelidir, yani microsoft bu teknolojiler üzerine BTS’ i geliştirmiştir.

Default.ASPX

using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
using System.IO;
using System.Reflection;
using System.Collections;
using System.Text.RegularExpressions;
using System.Web;
using System.Text;
using System;

public partial class _Default : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        DoPage();
    }

    protected void DoPage()
    {
        // XML Dokümanını yükle
        XmlDocument defaultXml = new XmlDocument();
        defaultXml.Load(HttpContext.Current.Server.MapPath("~/Data/Source.XML"));

        XslCompiledTransform myXsl = new XslCompiledTransform(true);

        XsltSettings xSet = new XsltSettings(true, true);

        xSet = XsltSettings.TrustedXslt;
        xSet.EnableDocumentFunction = true;
        xSet.EnableScript = true;

        XmlUrlResolver xr = new XmlUrlResolver();

        System.Security.PermissionSet ps = new System.Security.PermissionSet(System.Security.Permissions.PermissionState.Unrestricted);
        XmlSecureResolver sr = new XmlSecureResolver(new XmlUrlResolver(), ps);

        myXsl.Load(HttpContext.Current.Server.MapPath("~/Data/Proses.XSLT"), xSet, sr);

        XsltArgumentList myXslArguments = new XsltArgumentList();

        string n="";

        for (int i = 0; Request.QueryString.Count < i-1; ++i)
        {
            n = Request.QueryString.Keys[i].ToString();
            if (!(n.Equals("")))
                myXslArguments.AddParam(n, "", Request.QueryString.GetValues(i).ToString());
            n = "";
        }

        myXslArguments.AddParam("currentUser", "", User.Identity.Name);
        myXslArguments.AddParam("Browser", "", Request.Browser.Browser);

        System.IO.MemoryStream mIO = new MemoryStream();
        byte[] result;
        string myt;

        mIO.SetLength(0);
        myXsl.Transform(defaultXml, myXslArguments, mIO);

        result = mIO.ToArray();
        myt = Encoding.UTF8.GetString(result, 3, result.Length - 3);

        Response.Buffer = true;
        Response.ClearContent();
        Response.ClearHeaders();
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = "text/html";
        Context.Response.Write(myt);

        mIO.Close();

        Response.End();
    }

}

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

Web Servis Kullanarak Güncel Hava Durumunun Gösterilmesi

Kasım 2nd, 2008

Bu yazıda kısaca, bir windows applicationda, web servisten alınan hava durumu bilgilerinin nasıl gösteriminin yapılabileceğini anlatmaya çalışacağım.

İlk önce boş bir windows application oluşturmamız gerekmekte. Şekildeki gibi Proje ismine “Hava Durumu” diyebilirsiniz.
Yeni Proje Oluştur

Daha sonra oluşturduğumuz projeye aşağıdaki bilgilere sahip bir web servisi eklememiz gerekmekte. Hava durumu dışında, “http://www.webservicex.net” adresinde yaklaşık olarak 30-40 adet ücretsiz web servisi hizmeti bulunmakta. Bunların arasında IP bilgileri, Ülke bilgileri, Birim Çevrimi gibi çok fazla işe yarayan servisler bulunmakta.

URL : “http://www.webservicex.net/globalweather.asmx?wsdl

Web Service Reference Name : “HavaDurumuWebService”

Web Service

Daha sonra aşağıdaki gibi bir ekran görüntüsü hazırlamanız gerekmekte.

Form Tasarımı

Formun “OnLoad” metoduna

private void Form1_Load(object sender, EventArgs e)
{

HavaDurumuWebService.GlobalWeather havaDurumu = new Hava_Durumu.HavaDurumuWebService.GlobalWeather();
string xmlSehirler = havaDurumu.GetCitiesByCountry(“Turkey”);

XmlDocument sehirler = new XmlDocument();
sehirler.LoadXml(xmlSehirler);

XmlNodeList sehirNodes = sehirler.SelectNodes(“//City”);
foreach (XmlNode xNode in sehirNodes)
{

comboBox1.Items.Add(xNode.InnerText);

}

}

Comboboxın SelectedIndexChanged Eventına ise

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string secilenSehir = comboBox1.SelectedItem.ToString();
HavaDurumuWebService.GlobalWeather havaDurumu = new      Hava_Durumu.HavaDurumuWebService.GlobalWeather();
string xmlHavaDurumu = havaDurumu.GetWeather(secilenSehir, “Turkey”);

XmlDocument xmlHava = new XmlDocument();
xmlHava.LoadXml(xmlHavaDurumu);

XmlNode xTime = xmlHava.SelectSingleNode(“//Time”);
label4.Text = xTime.InnerText;
XmlNode xTemperature = xmlHava.SelectSingleNode(“//Temperature”);
label5.Text = xTemperature.InnerText;
}

kodlarınız yazarsak, programımız aşağıdaki resimlerde görüldüğü şekilde çalışacaktır.

Çalışan Hal

Çalışan Hal 2

Çalışan Hal 3

Programın Source Codunu buradan indirebilirsiniz.

Gelen Aramalar:

  • hava durumu web servisi
  • c# web servis kullanımı
  • hava durumu web servis
  • c# hava durumu cekme
  • meteoroloji web servis
  • hava durumu web service
  • c# hava durumu
  • hava durumu web servisleri
  • c# web service kullanımı
  • hava durumu servisi

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

DataTable to XMLDocument

Ekim 22nd, 2008

Diyelim ki elinizde bir iş için hazırlanmış bir DataTable var. Siz bundan hoşlanmadınız ve XMLDocument veya XML e çevirmek istediniz. Yapmanız gereken :


public XmlDocument DataTableToXMLDocument(DataTable dt)
{
DataSet ds = new DataSet();
ds.Tables.Add(dt);
ds.DataSetName = "rootNode";
ds.Namespace = "NameSpace";
XmlDocument xd = new XmlDocument();
xd.LoadXml(ds.GetXml());
return xd;
}

ds.DataSetName’i root Node’u belirlemek için,
ds.Namespace’yi XML’in Namespacesini belirlemek için kullanabilirsiniz.

Tags: , ,
Posted in .NeT 2008 | 1 Comment »

XSD Şemasından .NeT Classı Üretmek

Ekim 1st, 2008

Evet başlık doğru 🙂 Elinizde bulunan herhangi bir XSD şemasını kullanarak otomatik olarak .net sınıfı oluşturabilirsiniz.

Hatta bu yöntemle, sınıf tasarımlarınızı XML ile kolayca hazırlayabilirsiniz.

Aşağıda basit bir xml dosyası görebilirsiniz.

Kisi.XML

Şekildeki gibi basit bir XML dosyası hazırladıktan sonra, BizTalk 2006 da bulunan Schema Generatoru kullanarak XML dosyamızı otomatik olarak XSD schemasına dönüştürebiliriz. Tüm bunlarla uğraşmak istemiyorsanız ise XML veya generatoru kullanmadan, Boş bir XSD dosyası açarak istediğiniz schemayı manuel olarak oluşturabilirsiniz.

XML dosyasından XSD yi nasıl oluşturacağımıza gelince,

Aşağıdakinin aynısı yapılır,

1

Yukarıdaki yapıldıktan sonra ise aşağıdakinin aynısı yapılır,

2

Yukarıdaki yapıldıktan sonra ise aşağıdakinin aynısı yapılır,

3

Yukarıdaki yapıldıktan sonra ise aşağıdakinin aynısı yapılır,

4

Tüm işlemler yapıldıktan sonra üstteki gibi bir schema dosyamız oluşturulmul olacaktır. Daha sonra ise oluşturduğumuz bu XSD dosyasını kolaylık olması için C:\ dizinine kopyalayalım. Bu işlem command prompta yazılan komutun kısa ve kolay olmasını sağlayacaktır 🙂

Sonra “Visual Studio Command Prompt” çalıştırılır ve aşağıdaki komut yazılır.

XSD c:\kisiler.xsd /c /out:c:\

Bu komut işletildikten sonra “c:\kisiler.cs” aşağıdaki içerikle beraber oluşturulmuş olacaktır.

Kisiler.cs içeriği:

//——————————————————————————
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.42
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//——————————————————————————

using System.Xml.Serialization;

//
// This source code was auto-generated by xsd, Version=2.0.50727.42.
//

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”, “2.0.50727.42”)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“code”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace=””, IsNullable=false)]
public partial class Kisiler {

private KisilerKisi kisiField;

/// <remarks/>
public KisilerKisi Kisi {
get {
return this.kisiField;
}
set {
this.kisiField = value;
}
}
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”, “2.0.50727.42”)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“code”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class KisilerKisi {

private string adField;

private string soyadField;

/// <remarks/>
public string Ad {
get {
return this.adField;
}
set {
this.adField = value;
}
}

/// <remarks/>
public string Soyad {
get {
return this.soyadField;
}
set {
this.soyadField = value;
}
}
}

Kisiler.XSD içeriği :

<?xml version=”1.0″ encoding=”utf-16″?>
<xs:schema attributeFormDefault=”unqualified” elementFormDefault=”qualified” xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
<xs:element name=”Kisiler”>
<xs:complexType>
<xs:sequence>
<xs:element name=”Kisi”>
<xs:complexType>
<xs:sequence>
<xs:element name=”Ad” type=”xs:string” />
<xs:element name=”Soyad” type=”xs:string” />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Görüldüğü gibi tüm sınıf içeriği çok basit bir şekilde otomatik olarak oluşturuldu. Bunu daha kompleks XML dosyaları veya XSD schemaları içinde yapabiliriz. Otomatik olarak oluşturulacak sınıfımız ona göre karmaşık olacaktır.

Gelen Aramalar:

  • xsd c# class

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

XML

Ağustos 11th, 2008

XML = Extensible Markup Language

XML, W3C tarafından ortam bağımsız veri transferi için tasarlanmış bir dildir. Özellikleri;

  1. XML uygulama bağımsız veri ve belge yaratmaktadır.
  2. Meta data için standart bir gösterim sunmaktadır.
  3. Veri ve Belge için ortak standartları vardır.
  4. Data alışverişinde kullanılır.

XML bu özellikleri, yapısında barındırdığı hiyerarşi yapısı sayesinde sağlamaktadır.

HTML verinin sunumu ile ilgilenirken, XML verinin kendisiyle ilgilenmektedir. Bu sebepten dolayı, HTML dökümanları veriye ilişkin şekillendirme bilgilerini içerirken XML dökümanları ise, verinin tanım bilgilerini içermektedir.

Kodlanması:

(daha&helliip;)

Tags:
Posted in .NeT 2008 | No Comments »