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
)
- Aynı yapıya sahip iki şema zaten olmamalıysa, yani yanlışlıkla olmuşsa, gereksiz şemayı silip yeniden deploy edersiniz.
- Yanlışlık yoksa ve şemanın ikisini de kullanmanız gerekli ise;
- 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);
- 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.

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.
This article shows; How to create a flat file schema in Biztalk Server 2009,
My txt file’s content is like that;
07.07.2009—11:06:56— TURKIYE — KOCAELI— GEBZE— 123123 — 100 — KG
For now, one line will be enough,
- First of all, Open Visual Studio, and Create a BTS Project
- Right Click -> Add -> New Item

- Select Flat File Schema Wizard and click Add

- Click on Next

- Click on Browse,

- Select Directory, Select File and Click on Open

- Type Record Name, Type Target namespace, select Code page (if you haven’t got any idea, let them as default) and click on Next

- Select the line and Click on Next,

- For this flat file types click By delimiter symbol, if file has relative positions (means; position of node never changes) check relative positions. Then click on Next

- Type Child delimiter. in this file example, i use “—” as delimiter. Click on Next

- Type element names, select Data Types and Click on Next

- Now, on Biztalk Flat File Schema Wizard screen, you can see Schema View. Click on finish.

- Your schema is ready
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.

Ş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,

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

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

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

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.