ClickOnce Uygulamalarında Yerel ve Uzak Veriye Erişim

Uygulamaların çoğu veri üretir veya tüketir. ClickOnce size hem yerel olarak hem de uzaktan veri okuma ve yazma için çeşitli seçenekler sunar.

Yerel Veri

ClickOnce ile, aşağıdaki yöntemlerden birini kullanarak veriyi yerel olarak yükleyip depolayabilirsiniz.

  • ClickOnce Veri Dizini

  • Yalıtılmış Depolama

  • Diğer Yerel Dosyalar

d8saf4wy.collapse_all(tr-tr,VS.110).gifClickOnce Veri Dizini

Yerel bir bilgisayar üzerinde yüklenmiş her ClickOnce uygulaması, kullanıcının Documents and Settings klasöründe depolanan bir veri dizinine sahiptir. ClickOnce uygulamasına dahil edilen ve "veri" dosyası olarak işaretlenen herhangi bir dosya uygulama yüklendiğinde bu dizine kopyalanır. Veri dosyaları herhangi bir dosya türü olabilir. En çok kullanılanlar Microsoft Access .mdb dosyaları gibi veritabanı, metin ve XML dosyalarıdır.

Veri dizini, açık olarak uygulamanın depoladığı ve sürdürdüğü uygulama tarafından yönetilen veriler için düşünülmüştür. Uygulama bildiriminde "veri" olarak işaretlenmemiş tüm statik bağımlı olmayan (nondependency) dosyalar ise Uygulama Dizininde bulunur. Bu dizin, uygulamanın çalıştırılabilir (.exe) dosyalarının ve derlemelerinin bulunduğu konumdur.

Not

Bir ClickOnce uygulaması kaldırıldığında, kendisine ait Veri Dizini de kaldırılır.Son kullanıcı tarafından yönetilen belge gibi verileri depolamak için hiçbir zaman Veri Dizinini kullanmayın.

d8saf4wy.collapse_all(tr-tr,VS.110).gifClickOnce Dağıtımında Veri Dosyalarını İşaretleme

Veri dizini içine varolan bir dosyayı koymak için, ClickOnce uygulamanızın uygulamasında varolan dosyayı veri dosyası olarak işaretlemelisiniz. Daha fazla bilgi için bkz. Nasıl yapılır: ClickOnce uygulama bir veri dosyası dahil.

d8saf4wy.collapse_all(tr-tr,VS.110).gifVeri Dosyasına Yazma ve Veri Dosyasından Okuma

Veri Dizininden okuma ClickOnce uygulamanızın Okuma izni istemesini gerektirir; benzer olarak dizine yazmak Yazma izni gerektirir. Uygulamanız Tam Güven ile çalışacak şekilde yapılandırılmışsa, bu izne otomatik olarak sahip olacaktır. İzin Yükseltme veya Güvenilir Uygulama Dağıtımını kullanarak uygulamanız için izinleri yükseltme hakkında daha fazla bilgi için, bkz. ClickOnce Uygulamaları Güvenliğini Sağlama.

Not

Kuruluşunuz Güvenilir Uygulama Dağıtımı kullanmıyor ve İzin Yükseltmeyi devre dışı bırakmışsa, izinlerin verilmesi başarısızlıkla sonuçlanacaktır.

Uygulamanız bu izinlere sahip olduktan sonra, System.IO içindeki sınıflarda bulunan yöntem çağrılarını kullanarak Veri Dizinine ulaşabilir. Veri Dizininin yolunu ApplicationDeployment'ın CurrentDeployment özelliğinde tanımlanan DataDirectory özelliğini kullanarak Windows Forms ClickOnce uygulaması içerisinde elde edebilirsiniz. Verinize ulaşmak için en kullanışlı ve önerilen yol budur. Aşağıdaki kod örneği, dağıtımınızda veri dosyası olarak yer alan ve CSV.txt olarak adlandırılan bir metin dosyası için bunu nasıl yapacağınızı gösterir.

If (ApplicationDeployment.IsNetworkDeployed) Then
    Dim SR As StreamReader = Nothing

    Try
        SR = New StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory & "\CSV.txt")
        MessageBox.Show(SR.ReadToEnd())
    Catch Ex As Exception
        MessageBox.Show("Could not read file.")
    Finally
        SR.Close()
    End Try
End If
if (ApplicationDeployment.IsNetworkDeployed)
{
    try
    {
        using (StreamReader sr = new StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory + @"\CSV.txt"))
        {
            MessageBox.Show(sr.ReadToEnd());
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Could not read file. Error message: " + ex.Message);
    }
}

Dağıtımınızda dosyaları veri dosyası olarak işaretleme üzerine daha fazla bilgi için, bkz. Nasıl yapılır: ClickOnce uygulama bir veri dosyası dahil.

Veri dizini yolunu, Application üzerinde yer alan LocalUserAppDataPath gibi ilgili değişkenleri kullanarak da elde edebilirsiniz.

Diğer dosya türlerini değiştirme ek izinler gerektirebilir. Örneğin, bir Access veritabanı (.mdb) dosyası kullanmak isterseniz, ilgili System.Data sınıflarını kullanabilmek için uygulamanız tam güven düzeyinde olmalıdır.

d8saf4wy.collapse_all(tr-tr,VS.110).gifVeri Dizini ve Uygulama Sürümleri

Bir uygulamaya ait her sürümün diğer sürümlerden ayrılmış kendi Veri Dizini vardır. ClickOnce, uygulamanın çalışma sırasında yeni veri dosyaları oluşturacağı bir konuma sahip olması için dağıtımda veri dosyalarının yer alıp almamasını göz önünde bulundurmadan bu dizini oluşturur. Bir uygulamanın yeni sürümü yüklendiğinde, ClickOnce, uygulama tarafından oluşturulan veya özgün dağıtımdan gelen tüm dosyaları önceki sürümün Veri Dizininden yeni sürümün Veri Dizinine kopyalar.

Bir veri dosyası uygulamanın eski sürümünde yeni sürüme göre farklı bir karma değere sahipse, ClickOnce dosyanın eski sürümü ile sunucun yeni sürümünü değiştirir. Ayrıca uygulamanın önceki sürümü yeni sürümün dağıtımında bulunan bir dosya ile aynı ada sahip bir dosya oluşturduysa, ClickOnce yeni dosyayı eski sürümün dosyasının üzerine yazar. İki durumda da, eski dosyalar .pre olarak adlandırılan veri dizini içinde bir alt dizine eklenir. Böylece taşınma gibi durumlar için eski veriler hala ulaşılabilir olacaktır.

Daha hassas (finer-grained) bir veri taşıması gerekirse, eksi Veri Dizininden yeni Veri Dizinine özel taşıma gerçekleştirmek için ClickOnce Dağıtım API'si kullanabilirsiniz. IsFirstRun kullanarak mevcut bir indirmeyi test etmeniz gerekecek. Update veya UpdateAsync kullanarak güncelleştirmeyi indirin ve güncelleştirme tamamlandığında istediğiniz özel veri taşıma işini kendiniz yapın.

d8saf4wy.collapse_all(tr-tr,VS.110).gifYalıtılmış Depolama

Yalıtılmış Depolama, basit bir API kullanarak dosya oluşturma ve bunlara erişimi sağlar. Depolanan dosyaların asıl konumu hem geliştiriciden hem de kullanıcıdan gizlenir.

Yalıtılmış Depolama .NET Framework'ün tüm sürümlerinde çalışır. Yalıtılmış Depolama ek izin verilmesine gerek duymadan kısmi güvenilir uygulamalarda da çalışır. Uygulamanızın kısmi güvende çalışıp uygulamaya özel veriyi tutması gerekiyorsa, Yalıtılmış Depolama kullanmalısınız.

Daha fazla bilgi için bkz. Yalıtılmış Depolama.

d8saf4wy.collapse_all(tr-tr,VS.110).gifDiğer Yerel Dosyalar

Uygulamanızın rapor, resim, müzik gibi son kullanıcı verileriyle çalışması veya bunları kaydetmesi gerekiyorsa, uygulamanıza veriyi yerel dosya sisteminden okumak veya buraya yazmak için FileIOPermission gerekecektir.

Uzak Veri

Belirli bir noktada uygulamanız muhtemelen uzak bir Web sitesinden müşteri verisi veya pazar bilgisi gibi bilgileri almak zorunda olacaktır. Bu bölüm, uzak veriyi almak için kullanılan en yaygın teknikleri açıklar.

d8saf4wy.collapse_all(tr-tr,VS.110).gifDosyalara HTTP Kullanarak Erişim

System.Net isim uzayında WebClient veya HttpWebRequest sınıfını kullanarak bir Web sunucusunda veriye erişebilirsiniz. Veriler statik dosyalar, ham metin veren ASP.NET uygulamaları veya XML verisi olabilir. Verileriniz XML biçiminde ise, verileri almanın en hızlı yolu, Load yöntemi bağımsız değişken olarak URL alan XmlDocument sınıfını kullanmaktır. Bir örnek için bkz. Reading an XML Document into the DOM

Uygulamanız HTTP üzerinden uzak veriye erişmesi durumunda güvenliği dikkate almanız gerekir. Varsayılan olarak, ClickOnce uygulamanızın ağ kaynaklarına erişimi uygulamanızın nasıl dağıtıldığına bağlı olara sınırlandırılmış olabilir. Bu sınırlamalar, kötü amaçlı programların ayrıcalıklı uzak veriye erişim sağlamasını veya ağ üzerindeki başka bir bilgisayara saldırmak için kullanıcının bilgisayarının kullanmasını engellemek için uygulanır.

Aşağıdaki tabloda, kullanıyor olabileceğiniz dağıtım stratejileri ve bunların varsayılan Web izinleri listelenir.

Dağıtım türü

Varsayılan ağ izinleri

Web Yükleme

Yalnızca uygulamanın yüklendiği Web sunucusundan erişilebilir

Dosya Paylaşımı Yükleme

Hiçbir Web sunucusundan erişilemez

CD-ROM Yükleme

Herhangi bir Web sunucusundan erişilebilir

ClickOnce uygulamanız güvenlik sınırlamalarından dolayı bir Web sunucusuna erişemezse, uygulama bu Web sitesi için WebPermission belirtmelidir. ClickOnce uygulamasında güvenlik izinlerini arttırma üzerine daha fazla bilgi için, bkz. ClickOnce Uygulamaları Güvenliğini Sağlama.

d8saf4wy.collapse_all(tr-tr,VS.110).gifXML Web Hizmeti Aracılığıyla Veriye Erişim

Verilerinizi bir XML Web hizmeti olarak sergilerseniz, bir XML Web hizmeti proxy'si kullanarak verilere erişebilirsiniz. Proxy, Visual Studio kullanarak oluşturduğunuz .NET Framework sınıfıdır. Müşteri bulma, sipariş verme gibi XML Web hizmeti işlemleri proxy üzerinde yöntemler olarak sunulur. Bu, Web Hizmetlerini ham metin veya XML dosyaları kullanmaya göre daha kolay hale getirir.

XML Web hizmetiniz HTTP üzerinden çalışırsa, hizmet WebClient ve HttpWebRequest sınıfı olarak aynı güvenlik sınırlamaları aracılığıyla kısıtlanacaktır.

Bu görevi Visual Studio kullanarak da gerçekleştirebilirsiniz. Daha fazla bilgi için bkz. How to: Add and Remove Web References.  

d8saf4wy.collapse_all(tr-tr,VS.110).gifBir Veritabanına Doğrudan Erişim

Ağınız üzerinde SQL gibi bir veritabanı sunucusu ile doğrudan bağlantı kurmak için System.Data isim uzayı içinde yer alan sınıfları kullanabilirsiniz ama güvenlik konularını göz önünde bulundurmalısınız. HTTP isteklerinin tersine, veritabanı bağlantısı istekleri her zaman varsayılan değer olarak kısmi güven altında yasaklanmış olur; bunun gibi izinlere varsayılan olarak ClickOnce uygulamanızı bir CD-ROM'dan yüklerseniz sahip olursunuz. Bu, uygulamanıza tam güven sağlar. Belirli bir SQL sunucu veritabanına erişimi sağlamak için, uygulamanız SqlClientPermission istemelidir; SQL Sunucu dışında başka bir veritabanına erişimi sağlamak için de OleDbPermission istemelidir.

Çoğu zaman, veritabanına doğrudan erişmeniz gerekmez ancak bunun yerine ASP.NET'te yazılmış bir Web sunucusu uygulaması veya bir XML Web hizmeti aracılığıyla erişirsiniz. ClickOnce uygulamanız bir Web sunucusundan dağıtılırsa veritabanına bu şekilde erişim genellikle en iyi yöntemdir. Uygulamanızın izinlerini yükseltmeden kısmi güvende sunucuya erişebilirsiniz.

Ayrıca bkz.

Görevler

Nasıl yapılır: ClickOnce uygulama bir veri dosyası dahil