Biztalk Adminleri size soruyorum, aşağıdaki ekranı web üzerinden görseniz ne hissedersiniz?

Evet ben de öyle düşünmüştüm
Kurulum, indirme dahil, 3 dakika kadar sürüyor. Genelde Next ve Yes butonlarına tıklamak ile uğraşıyorsunuz sadece. Ondan sonra aşağıdaki linkte detaylarını bulabileceğiniz güzelliklere kavuşuyorsunuz. Geç kalmadan deneyin derim.
http://www.biztalk360.com
Uygulamanın sistem gereksinimleri ve dikkat edilmesi gerekenler aşağıdaki gibi;
System Requirement
- Windows XP SP3, Vista, 7, 2003 R2, 2008, 2008 R2
- BizTalk : 2006, 2006 R2, 2009, 2010
- SQL Server 2005, 2008, 2008 R2 (Including Express)
- IIS: 5.0, 6.0, 7.0, 7.5
Important: Installation Instruction
Please make sure the IIS application pool account you are going to use during installation is part of
- BizTalk Server Administrators Group
- SSO Administrators Group
- IIS_IUSRS group, and
In addition SELECT permission need to be granted to BizTalk Admin Role for few tables in BizTalkMgmtDb using the below script
GRANT SELECT ON dbo.adm_OtherDatabases TO BTS_ADMIN_USERS
GRANT SELECT ON dbo.adm_Server2HostMapping TO BTS_ADMIN_USERS
GRANT SELECT ON dbo.adm_ServiceClass TO BTS_ADMIN_USERS
GRANT SELECT ON dbo.BizTalkDbVersion TO BTS_ADMIN_USERS
Semptomlar şu şekilde görünmekte:
Oracle Adapter Portuyla ilgili yaptığınız herhangi bir işlemde (receive locationın polling intervalını değiştirmek gibi basit işlemler dahil) Invalid bindig error hatası alırsınız.
Muhtemel Kurulumunuz :
64-Bit Biztalk Server 2009 kurulumu
32-Bit ve/veya 64-Bit Biztalk Adapter Pack 2.0
32 -Bit ve/veya 64-Bit WCF LOB Adapter SDK
64-Bit Oracle 11g Client
Eğer kurulumunuz yukarıdakine benziyorsa siz de hata alacaksınız demektir. 64-Bit için olması gereken kurulum aşağıdaki gibidir.
Olması Gereken Kurulum :
64-Bit Biztalk Server 2009 kurulumu
32-Bit ve 64-Bit Biztalk Adapter Pack 2.0
64-Bit WCF LOB Adapter SDK (evet sadece 64, yanında 32 istenmiyor
)
32-Bit ve 64-Bit Oracle 11g Client
yukarıdaki liste harfi harfine kurulmalıdır. Bitlerdeki eksiklikler affedilmemektedir efenim
Microsoftun ilgili sayfası : http://msdn.microsoft.com/en-us/library/dd787836(BTS.10).aspx#BKMK_InvalidBinding
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