BizTalk – Genel Bakıs

Çocukluğunda, muzur amcalar tarafından “1 kilo demir mi ağır, 1 kilo pamuk mu?”, “5 elma, 3 armut daha kaç eder?” gibi sorular ile uyanıklık seviyesi ölçülmemiş çocuk yoktur sanırım. Asıl sarsıcı an ise soruların cevaplarının öğrenildiği andır. Biz işin matematiğine dalıp toplamaya çalışırken sayıları, cevap tokat gibi gelir; “Elma ile armut toplanmaz”. Mantıksal olarak toplanamasa da yazılımsal olarak toplanması yani elma ile armudun konuşması, haberleşebilmesi mümkün.

BizTalk Server(BTS)‘ın yeteneklerinden ilk akla gelen bu elma ile armudu birbiri ile konuşturması, haberleştirmesidir. Burdaki meyvelerden kasıt tabi ki birbirinden farklı sistemlerdir. Aşağıdaki resimde gösterildiği üzere; ERP sistemi ile Finans departmanının haberleşmesini, aynı zamanda tedarikçiler ile Logistics ekibinin entegrasyonunu gerçekler.

Image

BTS bir entegrasyon sunucusudur. Bu blogunda baş kahramanıdır 🙂 BTS şu 3 alanda sorunları çözmeyi hedefler:
– Kurumsal uygulama entegrasyonu (EAI)
– Business to business (B2B) or Business to Customer(B2C)
– Süreç otomasyonu (BPA)

BTS sahip olduğu adaptörler yardımı ile birbirinden farklı ortamlara bağlanabilmektedir. Örneğin FILE adaptörü ile dosya sistemini dinleyebilir yada SOAP adaptörü ile web servislere request gönderebilir. Genel olarak BTS organizasyon bünyesinde veya organizasyonun partnerleriyle sahip olduğu ortak süreçleri otomatize etmekte kullanılır. Sahip olduğu adaptörler ile line of business (LOB) uygulamalarına (Siebel, SAP, IFS Applications, JD Edwards, Oracle,Microsoft Dynamics CRM) entegre çalışabilir.

Bu noktada akla şu soru gelebilir: “Peki tamam adaptörlerle veriyi aldı şimdi napacak yada yapabilir?” yada “Veri nerede duruyor şuan memory,disk?”. BTS’in göbekten bağlı olduğu ürün MS SQL Server’dır. BTS tarafından işlenmek üzere alınan her mesaj veritabanında saklanır.Verinin saklandığı yer MessageBox veritabanıdır. Her mesaj ilk iş olarak DB’ye atıldıktan sonra, iş sürecine dahil edilir.

Image

Yukardaki iş akış diagramındaki iş sürecini, BTS üzerinde implemente etmek mümkün.Tanımlamış olduğumuz süreç çalıştırıldıktan sonra süreç bitimine kadar alınan mesaj saklanır. Süreç tamamlandıktan sonra mesaj BTS veritabanından silinir. (Tracking özelliğini aktif hale getirdiysek, mesaj silinip MessageDTA veritabanına alınır.)

COM, DCOM, COM+, Remoting, Web Servisler ….

Önceleri kişisel bilgilsayardaki programlarla mesela spreadsheet programları veya veritabanı paketlerinin aracılığı ile işler yürütülmekteydi. Klasik masaüstü platformları, tek kullanıcılı ve çoklu işlem yapma yetenekleri kısıtlıydı.
Kişisel bilgisayarın gelişmesi ve çoğalması ile bilgisayarların birlikte bir ağ üzerinde çalışacabilecekleri seviyelere gelindi. Bilgisayarlar artık birbirleriyle konuşabilmekteydiler.

Microsoft, kendi platformu üzerinde çalışan uygulama ve komponentlerin konuşabilmesi için COM(Component Object Model) geliştirdi. COM ile aynı bilgisayar üzerinde bulunan uygulama veya komponentler birbirleri ile konuşabilir hale geldiler. COM’un ardından DCOM(Distributed COM) geliştirildi ki amaç farklı bilgisayarlar üzerinde bulunan komponentlerin birbirleriyle iletişimini sağlamaktı. Daha sonra COM+ geliştirildi. Burda amaç DCOM’un yeteneklerine ilaveler yapmaktı. Örneğin otomatik kaynak yönetimi veya eşzamansız çalışma desteği gibi. COM+ .NET Framework ile elden geçirildi ve Enterprise Services olarak adlandırıldı. Uygulamaların haberleşmesi adına Remoting kullanıldı. Tüm bu teknolojiler COM, DCOM, COM+, Enterprise Services ve Remoting aynı yerel ağ üzerindeki uygulama ve komponentlerde düzgün çalışıyordu. Ayrıca tüm bu teknolojiler Windows işletim sistemi ailesi için geçerliydi. Peki farklı platformlar üzerinde çalışan uygulamaları küresel anlamda world wide web üzerinden konuşturmak istersem ne yapmam gerekir?

Image

Web servisler bu soruya yanıt oluyor. Web servisler internet üzerinde barındırılan uygulamalardır. Webservislerin herhangibir programlama diline veya işletim sistemine bağımlılıkları yoktur. Dağıtık uygulamaların geliştirilmesinde küresel mekanizma olarak kullanılacak web servislerin üzerinde geliştiricilerin bazı noktlarda karar birliğine varmaları kaçınılmazdır.

  • Örneğin data formatı nasıl olacak?
  • Data alışverişinde hangi protokol kullanılacak?
  • Web servislerin güvenlikleri nasıl sağlanacak?

Bu soruların cevabını uluslar arası oluşturulan konsorsiyum belirlemiştir. Webservislerin kullandıkları veri formatı XML’dir. Protokol ise SOAP(Simple Object Access Protocol). SOAP bazı spesifikasyonlara sahiptir.

  • SOAP mesajının formatı
  • Data nasıl encode edilecek
  • Mesaj nasıl gönderilecek
  • Bu mesaj cevapları nasıl ele alınacak

Webservislerin tanımı WSDL(Web Service Description Language) dokumanındadır. Bu tanımlama dokumanında servisin aldıgı ve donus yaptıgı mesaj tiplerinin tanımları yer almaktadır. Webservislerin güvenlikleri konusu önemli hale gelmektedir çünkü lokal makinalarımıza koydugumuz şifre mantığıyla küresel olarak kullanılması gereken servisleri güvenli hale getiremeyiz. OASIS(Organization of Advancement of Structured Information Standards) konsorsiyumu bazı standartlar hazırlamıştır. Örneğin kullanıcı adı-şifre kullanımı, X509 sertifikaları, Kerberos tokens. Kendi uygulamamız ve webservis arasındaki verilerin başkaları tarafından ele geçirilmemesi için verinin şifrelenmesi gündeme gelmektedir. Bunu için kullanılan birkaç mekanizmadan en çok kullanılanı private ve public key’lerdir.

Image

Yazılım geliştiricleri web servis ilkelerini daha genelleştirilecek şekilde “Software as a Service” konseptine taşıdılar. Trend servis odaklı mimariye(SOA) dayalı uygulamalar geliştirme yönünde gitmektedir. Web servisler organizasyonun iş mantıklarının iyi tanımlanmış operasyonlarının servis edilmesine olanak sağlar. Başarılı servisler aşağıdaki özelliklere sahip olmalıdır.

  • Birlikte çalışılabilirliği artırmak adına, standartlara dayanan genişletilebilir ve tekrar kullanılabilir olması
  • Gelen taleplere hızlı cevap vermesi için ölçeklenebilir barındırma ortamlarının oluşturulması

Proxy sunucu üzerinden web servis tüketmek

Proxy sunucu üzerinden bizim sistemimiz dışındaki bir web servisi tüketmek istediğimizde;

  • “Add Web Reference” seçeneğini kullandıysak eğer, bizim için ilk etapta anlamlı olmayan aşağıdaki hatayı almamız olasıdır.

Operation is not valid due to the current state of the object.

Failure2

  • “Add Service Reference” seçeneğinde bizim için çok daha anlamlı olan bir hata ile karşılaşırız.

Metadata contains a reference that cannot be resolved:
http://www.remotesite.com/stokws/tasinirmalservis.asmx?WSDL’.
The remote server returned an unexpected response: (407) authenticationrequired.
The remote server returned an error: (407) Proxy Authentication Required.

Failure1

Hata açıklamasında gayet net bir şekilde belirtilen; proxy sunucusu kimlik doğrulaması istemektedir. Domain kullanıcı bilgisi ile bu hatadan kurtulabiliriz.Fakat kimlik bilgilerini nereye, nasıl gireceğiz?

Öncelikle web servisin WSDL’ini bir text dosyasına kayıt ettikten sonra bu dosyayı kullanarak servisi projemize eklememiz gerekiyor. Daha sonra web servisimizi tüketme noktasında araya girerek proxy sunucusu için kimlik bilgilerimizi vermeliyiz.

//Sunucu IP, adres ve port bilgisini veriyoruz.
System.Net.WebProxy pry = new System.Net.WebProxy("MyHost", 8080);

//The DefaultCredentials otomatik olarak kullaniciAdi ve sifreyi alir.
pry.Credentials = System.Net.CredentialCache.DefaultCredentials;
System.Net.WebRequest.DefaultWebProxy = pry;