Etiket: web service

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 »

Sharepoint Error : Excel Servisi Yetki Hatası

Ocak 14th, 2010

Hata :

Access Denied

You do not have permissions to open this file on Excel Services.

Make sure that the file is in an Excel Services trusted location and that you have access to the file.

Çözüm :

  1. Central Administration -> Operations : Burada servislerden Excel Servisinin çalışıyor durumda olduğundan emin olun,
  2. Central Administration -> SharedServices1 -> Edit Excel Services Setting : Buradan ise File Acces Method un Process Account olduğundan emin olun (değilse en alta admin bir user ve password girmeyi unutmayın),
  3. Muhtemel hata budur;

    Central Administration -> SharedServices1 ->Trusted File Locations

    yolunu izleyerek, Data Connection Library imizi ve/veya Report Library mizi güvenilir listesine ekliyoruz;

    Burada kritik olan şey;
    Location Type ın Windows Sharepoint Services olarak seçilmesi ve URL in düzgün bir şekilde yazılması.

Tags: , , , , , , , , , , ,
Posted in Sharepoint | 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.

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