Bu yazımda bir Silverlight 2 uygulamasında, client taraf ile ASP .NET tarafı arasında veri alışverişini sağlayacak uygulama geliştirmek istediğimizde karşımıza çıkması muhtemel olan Cross Domain Restrictions (çapraz etki alanı kısıtlamaları) olayını 2 farklı yöntemle aşmaya çalışacağız.
Resim: Cross-domain erişim yapısı.
Cross Domain Restrictions’dan kısaca bahsetmek gerekirse; bir güvenlik önlemi olarak, Silverlight kendi çalışma alanı (domain) sınırları dışında çalışma izni vermemektedir. Bu yazımızdaki örneğimizde kendi local bilgisayarımızda oluşturacağımız iki farklı domain ile konuyu ele alacağız.
ASP.NET tarafında bize veri iletimini sağlaması amacıyla bir Silverlight-enabled WCF Service oluşturalım. Solution Explorer üzerinde resimdeki gibi bir Silverlight uygulaması üzerinde çalıştığımızı varsayalım.
Hemen ardından web servisimize artık gelenekselleşmiş olan, standart mesajımız “Hello World” mesajını ekliyoruz. Buradaki amacımız WCF servis yapısını anlatmak olmadığından bu kısımları hızlıca geçiyoruz.
Uygulamamızın Client tarafına ServiceReferance isimli WCF servis referansımızı ekleyelim. ServiceReferance.ClientConfig isimli configurasyon dosyası da projemize eklenecektir.
ServiceReferance.ClientConfig dosyasının içeriğine göz atalım. Endpoint address’in localhost 1283 no’lu port dan çalışacak şekilde otomatik olarak yazıldığı görülecektir.
public partial class Page:UserControl {
private ServiceReferance.Service1Client myService = null;
public Page() {
InitializeComponent();
this.Loaded += new RoutedEventHandler(Page_Loaded);
}
private void Page_Loaded(object sender,RoutedEventArgs e) {
myService = new SilverWebServiceTestProj.ServiceReferance.Service1Client();
myService.HelloWorldCompleted += myService_HelloWorldCompleted;
myService.HelloWorldAsync();
private void myService_HelloWorldCompleted(object sender,SilverWebServiceTestProj.ServiceReferance.HelloWorldCompletedEventArgs e) {
if(e.Error == null) {
MessageBox.Show(e.Result);
} else {
MessageBox.Show(e.Error.Message);
Page.xaml’a hiçbir kod satırı eklemeden F5 ile debug modda projemizi derleyip çalıştırdığımızda herhangi bir hata ile karşılaşmadan “Hello World” mesajı ile karşılaşacağız. Şimdi uygulamamızı faklı bir etki alanına (localhost/test) publish edelim ve localhost:1283 adresinde bulunan WCF servisimize erişmeye çalışalım.
ASP .NET projemize sağ tıklayarak Publish seçeneğini seçelim. Local makinemizde oluşturacağımız test isimli dizine publish ediyoruz. (wwwroot/test)
Publish işlemi tamamlandıktan sonra yeni bir browser açarak uygulamızı çalıştıralım.
int lastIndex = HtmlPage.Document.DocumentUri.AbsoluteUri.LastIndexOf("/");
string basePath = HtmlPage.Document.DocumentUri.AbsoluteUri.Substring(0,lastIndex);
string serviceAddress = string.Concat(basePath,"/Service1.svc");
myService = new SilverWebServiceTestProj.ServiceReferance.Service1Client(new BasicHttpBinding(),
new EndpointAddress(serviceAddress));