Benim yazılarımı takip edenler hatırlayacaklardır. Daha önce CRM üzerinde
veri sorgulama yöntemleri isimli yazı dizimin 1. bölümü web servislerini
kullanarak veri sorgulama yöntemleriydi. O makalede web servisleri hakkında
bilgi vermiştim ama şimdi CRM 4.0 çıkınca, CRM 4.0'ın web servisinin ek
özelliklerini anlatmak ve performans konularına değinmek istedim.
CRM Web Servisi performans düşüklüğü nedeniyle programcılar tarafından pek
sevilmemektedir. Bu makalede sizlere web servisin yapısını ve performans
attırıcı bir yöntemlerden bahsedeceğim. Ayrıca CRM 3.0 ve 4.0 arasındaki servis
yapısındaki değişikliklere göz atacağız.
WebServis’leri ise bize özellikle veri yazarken büyük kolaylıklar sağlasa da
veri okurken bazen karışık olabiliyor. Web Servisleri class(sınıf) mimarisinde
olduğundan nesne paylaşımına dayalı bir altyapı sunuyor. Bu doğru
kullanıldığında, bize, program yazarken uzun uzun attribute ve property
hazırlamak derdinden kurtarıyor.
Microsoft CRM’in 2 adet temel Web Servisi bulunmakta;
- CRM Service : istediğiniz entity üzerinde Create(Oluşturma),Update(Güncelleme)
, Delete(Silme) gibi işlemleri yapmanızı sağlıyor. Adresi;
CRM 3.0 :
http://<yourservername(:port)>/mscrmservices/2006/crmservice.asmx
CRM 4.0 :
http://<yourservername(:port)>/mscrmservices/2007/crmservice.asmx
alternatif olarak http://<yourservername(:port)>/MSCRMServices/2007/CrmServiceWsdl.aspx
- Metadata Service : CRM’in entity ve picklist mimarisi gibi metadata
veritabanında bulunan veriler üzerinde yine Create(Oluşturma),Update(Güncelleme)
,Delete(Silme) gibi işlemleri yapmanızı sağlıyor. Metadata verisi içerisinde
bir picklist(yani combobox-dropdownbox)’in içeriği, bir alanın türü gibi
sistem üzerinde kullandığımız nesnelere yönelik bilgileri tutmaktadır.
Adresi;
CRM 3.0 :
http://<yourservername(:port)>/mscrmservices/2006/metadataservice.asmx
CRM 4.0 :
http://<yourservername(:port)>/mscrmservices/2007/metadataservice.asmx
Web Servisini Projemize Eklemek :

Visual Studio’da açtığımız uygulamamızın adı üzerinde sağ tuşa tıklayarak
getirdiğimiz menüde aşağıdaki gibi “Add Web Reference”’a tıklıyoruz.

Açılan pencereye eklemek istediğimiz servisin url’ini yazıyoruz ve “go”
düğmesine tıklıyoruz.
Servis credential yani kimlik doğrulamak için bizden kullanıcı adı ve şifre
isteyecek. Bunu geçtikten sonra “Web reference name”’e servise verecegimiz ismi
yazıyoruz. Burada ben “MyService” ismini veriyorum. “Add Reference” düğmesine
tıklıyoruz.Artık servisimizi projemize eklemiş durumdayız.
- CRM servisimizin oluşturuyoruz.
CrmService
MyService = new
CrmService();
- Servise network'te kim olduğumuzu söyleyelim eğer CRM serverın bulunduğu
domainde oturum açmadıysak bunu yapmak zorundayız.
System.Net.NetworkCredential
MyCredential = new
System.Net.NetworkCredential();
MyCredential.UserName = "";
MyCredential.Password = "";
MyCredential.Domain =
"";
MyService.Url =
"http://
i p : port/MSCrmServices/2007/CrmService.asmx";
MyService.Credentials = MyCredential;
Bu kod ile servise bağlandığımız zaman sistem üzerinde yaptığımız
bütün hareketlerde yani güncelleme ve kayıt işlemlerinde burada vereceğiniz
kullanıcı adı ve şifrenin ait olduğu kullanıcı created ve modified user
olarak gözükecektir. Yani sistemde bizim uygulamamzı kullanan bütün
kullanıcıları teke indirmiş olacağız.
Bunun olmasını istemiyorsak aşağıdaki kodu kullanmamız gerekir;
MyService.Credentials = System.Net.CredentialCache.DefaultCredentials;
Bu kod sayesinde IIS üzerinde Integrated Windows Authentication ile
oturum açmış olan kullanıcıyı yani CRM'e girmiş olan kullanıcının yetkileri
ile işlem yapmış oluruz. Burada hatırlanması gereken en önemli şey
uygulamamızın işlem yaptığı entityler üzerinde kullanıcının yetkilerine göre
web servisin bize cevap vereceğidir.
- işte burası servisi hızlandırdığımız nokta. Nasıl mı oluyor adı üzerinde
aslında güvensiz bağlantı paylaşımı yani yukarıda bahsettiğimiz güvenlik
yöntemlerinden biri ile IIS üzerinde oturum açan bir kullanıcı olduğu zaman
IIS talepte bulunan diğer kullanıcılar için doğrulama yapmıyor yani Kerberos
devreye girmiyor Active Directory'e gidilmiyor. Bunlar sonucunda
performansta gözle görülür bir artış oluyor.
MyService.UnsafeAuthenticatedConnectionSharing =
true;
Ama işte burası önemli aması var :) sisteme ilk kim giriş yaparsa IIS o
kullanıcı ile devam ettiğinden her işi sanki birinci kullanıcı yapmış gibi
görünüyor. CRM'in performansını arttırmakla ilgili daha detaylı makalelere
bu linkten ulaşabilirsiniz : Performans Arttırmak
- CRM 4.0 bildiğiniz gibi farklı hosting modelleri ile birlikte geliyor.
Tabii bu hosting modellerini programatik olarak da kontrol etmek gerek.
Artık crm serverine bağlanırken bir AuthenticationToken'a ihtiyacımız var bu
olmadan servis bağlantı yapmanıza izin vermeyecektir.
Token nesnesi içerisinde bulunan AuthenticationType isimli Property 0,1,2
değerlerinden birini almaktadır. Bunların anlamları ise;
| Alan |
Değer |
Tanım |
| AD |
0 |
Standart Active Directory authentication. |
| Passport |
1 |
Passport authentication. Şu an için Amerika ve
Kanada'da kullanılacak olan windows live id ile Microsoft tarafından
yapılacak olan hostinglerde geçerli olacak. |
| Spla |
2 |
Specifies Internet Facing Deployment authentication
(formerly known as SPLA). Firmanızının CRM hosting yapacağı zaman
kullanacağınız doğrulama biçimi. |
Bütün bunların yanında hosting yapsanız da yapmasanız da kullanmanız gereken
bir property var adı OrganizationName. Hangi CRM organization için sisteme
giriş yaptığınızın bilgisidir.
CrmAuthenticationToken token =
new
CrmAuthenticationToken();
token.AuthenticationType = 0;
token.OrganizationName = "CRMVPC";
MyService.CrmAuthenticationTokenValue = token;
private
CrmService service(bool
isUnsafe)
{
try
{
CrmService
MyService = new
CrmService();
// servise network'te kim oldugumuzu
soyluyoruz. (Eger CRM Server'i ile ayni domainde degilseniz
// bunu yapmak zorundasiniz yoksa "The
request failed with HTTP status 401: Unauthorized." hatasini alirsiniz)
System.Net.NetworkCredential
MyCredential = new
System.Net.NetworkCredential();
MyCredential.UserName = "";
MyCredential.Password = "";
MyCredential.Domain =
"";
MyService.Url =
"http://
i p : port/MSCrmServices/2007/CrmService.asmx";
MyService.Credentials = MyCredential;
// Eger crm server ile ayni domainde
iseniz ve sizin crm'de bir rolunuz varsa asagida parantezler icerisinde
// belirttigim komutu yukaridaki 5
satir yerine kullanabilirsiniz
// ( MyService.Credentials =
System.Net.CredentialCache.DefaultCredentials; )
// servisi hizlandirmak icin true
degerini atiyabiliriz.
MyService.UnsafeAuthenticatedConnectionSharing = isUnsafe;
/// CRM 4.0 ile gelenler
CrmAuthenticationToken token =
new
CrmAuthenticationToken();
token.AuthenticationType = 0;
token.OrganizationName = "CRMVPC";
MyService.CrmAuthenticationTokenValue = token;
return MyService;
}
catch (Exception
ex)
{
HandleException(ex);
return
null;
}
}
Bir makalemizin daha sonuna geldik.
Barış KANLICA
Yazılım Uzmanı – Software Specialist
brsk@e-kolay.net
www.cub-e.net
forum.cub-e.net
Bu yazıyı ilk değerlendiren siz olun
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5