Etiket: BTS 2009

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 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 | 2 Comments »

Biztalk Server için SAP Yüklemesi

Kasım 22nd, 2009

Biztalk Server için SAP RFC Libraries Yüklemesi;

  1. SAP Front End Installer ekranında Next butonuna tıklanır,
  2. SAP_GUI_Installation_1

  3. SAP Product Selection ekranında sadece Unicode RFC Libraries ın seçilmesi yeterli olucaktır. Zira Biztalk sadece buradaki RFC kütüphanelerini kullanıyor,
  4. SAP_GUI_Installation_3

  5. Yol ve Kurulum için isim veriyoruz ve Next butonuna tıklıyoruz,
  6. SAP_GUI_Installation_4

  7. Finish butonu ile işlemimizi bitiriyoruz.
  8. SAP_GUI_Installation_5

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

Biztalk Server için Oracle Client Patch Yüklemesi

Kasım 22nd, 2009

Biztalk Server için Oracle Client üzerine Patch geçilmesi;

  1. Welcome ekranından Next butonuna tıklıyoruz,
  2. Oracle_Patch_Installation_1

  3. Aşağıda ekranda görüldüğü gibi Name ‘ i Oracle Client kurulumu yaptığınızı dizin ve ismi seçmeniz gerekmekte. Eğer varsayılanı seçerseniz geçilen patchin bir işlevi ve anlamı olmaz. Mutlaka Path ve Name ‘ in Oracle Client kurulumu sırasında verdiğiniz değerler olup olmadığını kontrol edin.
  4. Oracle_Patch_Installation_3

  5. Next butonuna tıklıyoruz,
  6. Oracle_Patch_Installation_4

  7. Muhtemelen aşağıdaki gibi bir hata ile karşılaşacaksınız. Karşılaşmazsanız sorun yok :) Hata OracleMTSRecoveryService ini stop etmeniz gerektiğini söylüyor.
  8. Oracle_Patch_Installation_5

  9. OracleMTSRecoveryService ini servisler ekranından stop edip, Retry butonuna tıklıyoruz,
  10. Oracle_Patch_Installation_6

  11. Summary ekranında son kontrollerimizi yapıyoruz ve Install butonuna tıklayarak yükleme işlemini başlatıyoruz.
  12. Oracle_Patch_Installation_7

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

Biztalk Server için Oracle Client Yüklemesi

Kasım 22nd, 2009

Oracle Client Kurulumu ;

  1. Oracle Client kurulumu için setup çalıştırılır ve Next butonuna tıklanır.
  2. oracle_installation_1

  3. Select Installation Type ekranından Custom seçilir ve Next butonuna tıklanır. Product Languages butonundan istenilen yükleme dili seçilir. Türkçe ve İngilizce seçili olması iyi olur,
  4. Oracle_Installation_2

  5. Installa Location olarak C:\Oracle dizinini veya istediğiniz herhangi bir yol verebilirsiniz,
  6. Oracle_Installation_3

  7. Product-Specific Prerequisite Checks ekranında hata almadığımızı görüp Next butonuna tıklıyoruz,
  8. Oracle_Installation_4

  9. Biztalk için aşağıdaki resimdeki komponentleri yüklememiz gerekiyor. Bunları check liyoruz, ek olarak istediklerimizi işaretleyebiliriz,
  10. Oracle_Installation_5

  11. Port Number ı 2030 a setleyip Next butonuna tıklıyoruz,
  12. Oracle_Installation_6

  13. Summary ekranından son kontrollerimizi yapıyoruz ve Install butonuna tıklıyoruz,
  14. Oracle_Installation_7

  15. Exit ile yükleme işlemini bitiriyoruz.
  16. Oracle_Installation_8

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

How to Create Flat File Schema in Biztalk

Temmuz 12th, 2009

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,

  1. First of all, Open Visual Studio, and Create a BTS Project
  2. Right Click -> Add -> New Item
  3. flat1

  4. Select Flat File Schema Wizard and click Add
  5. Flat2

  6. Click on Next
  7. flat3

  8. Click on Browse,
  9. flat4

  10. Select Directory, Select File and Click on Open
  11. flat5

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

  14. Select the line and Click on Next,
  15. flat7

  16. 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
  17. flat8

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

  20. Type element names, select Data Types and Click on Next
  21. flat10

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

  24. Your schema is ready :)
  25. flat12

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