Alıştırma - ASP.NET web uygulamasında oturum durumu bilgilerini depolama
ASP.NET web uygulamaları için birçok oturum durumu sağlayıcısı kullanılabilir. Azure App Service altında çalışan bir web uygulamasında Redis için Azure Cache sağlayıcısını kullanmak, çok fazla sayıda eşzamanlı oturumu desteklemek için gereken ölçeklenebilirlik ve performansı sunabilir. Özellikle de aynı oturuma gelen isteklerin web uygulamasının farklı örneklerine yönlendirildiği durumlarda bu geçerlidir.
Bu alıştırmada Redis için Azure Cache hizmetinin bir örneğini oluşturacaksınız. Örnek web uygulaması için oturum sağlayıcısını bu önbelleği kullanacak şekilde yapılandıracaksınız. Ardından uygulamanın oturum durumu bilgilerini depolamak için önbelleği kullandığını doğrulayacaksınız.
Redis için Azure Cache örneği oluşturma
Sağ taraftaki Azure Cloud Shell penceresinde aşağıdaki komutu çalıştırarak, oluşturulacak Redis için Azure Cache örneğinin adını içeren PowerShell değişkenini tanımlayın:
$rediscachename = (-join($useralias, "-workshop-cache"))
Redis için Azure Cache örneğini oluşturun. Bu komutun tamamlanması 15 dakika kadar sürebilir:
az redis create ` --location $location ` --name $rediscachename ` --resource-group $resourcegroupname ` --sku Basic ` --vm-size c0
Önbelleğin sağlama durumunu denetlemek için aşağıdaki komutu çalıştırın. Başarılı iletisini görüntüleyene kadar bu komutu 30 saniyede bir yineleyin:
(Get-AzRedisCache ` -ResourceGroupName $resourcegroupname ` -Name $rediscachename).ProvisioningState
Önbelleğin birincil erişim anahtarını alın ve daha sonra kullanmak üzere kaydedin:
$rediskey = (Get-AzRedisCacheKey ` -Name $rediscachename ` -ResourceGroup $resourcegroupname).PrimaryKey
Web uygulamasında oturum sağlayıcısını yapılandırma
eShopLegacyWebForms çözümünü düzenlemek için Visual Studio'ya dönün.
Çözüm Gezgini penceresinde eShopLegacyWebForms projesine sağ tıklayıp NuGet Paketlerini Yönet'i seçin.
NuGet Paket Yöneticisi penceresinde Gözat’ı seçin. Ara kutusuna Microsoft.Web.RedisSessionStateProvider girin. Microsoft.Web.RedisSessionStateProvider paketini seçin ve Yükle'yi seçin.
Değişiklikleri Önizle penceresi görüntülenirse Tamam’ı seçin.
Lisans Kabulü penceresinde Kabul Ediyorum’u seçin.
Çözüm Gezgini penceresinde web.config dosyasını seçin.
Web.config dosyasında sessionState bölümünü bulun. Şunun gibi görünür:
<sessionState mode="Custom" customProvider="MySessionStateStore"> <providers> <!-- For more details check https://github.com/Azure/aspnet-redis-providers/wiki --> <!-- Either use 'connectionString' OR 'settingsClassName' and 'settingsMethodName' OR use 'host','port','accessKey','ssl','connectionTimeoutInMilliseconds' and 'operationTimeoutInMilliseconds'. --> <!-- 'throwOnError','retryTimeoutInMilliseconds','databaseId' and 'applicationName' can be used with both options. --> <!-- <add name="MySessionStateStore" host = "127.0.0.1" [String] port = "" [number] accessKey = "" [String] ssl = "false" [true|false] throwOnError = "true" [true|false] retryTimeoutInMilliseconds = "5000" [number] databaseId = "0" [number] applicationName = "" [String] connectionTimeoutInMilliseconds = "5000" [number] operationTimeoutInMilliseconds = "1000" [number] connectionString = "<Valid StackExchange.Redis connection string>" [String] settingsClassName = "<Assembly qualified class name that contains settings method specified below. Which basically return 'connectionString' value>" [String] settingsMethodName = "<Settings method should be defined in settingsClass. It should be public, static, does not take any parameters and should have a return type of 'String', which is basically 'connectionString' value.>" [String] loggingClassName = "<Assembly qualified class name that contains logging method specified below>" [String] loggingMethodName = "<Logging method should be defined in loggingClass. It should be public, static, does not take any parameters and should have a return type of System.IO.TextWriter.>" [String] redisSerializerType = "<Assembly qualified class name that implements Microsoft.Web.Redis.ISerializer>" [String] /> --> <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="" accessKey="" ssl="true" /> </providers> </sessionState>
Aşağıdaki kodda gösterildiği gibi açıklama satırı yapılmış içeriği kaldırın ve MySessionStateStore girdisini ekleyin. youralias değerini $useralias PowerShell değişkeninin değeriyle değiştirin<.> birincil anahtarı> $rediskey PowerShell değişkeninin değeriyle değiştirin<.
<sessionState mode="Custom" customProvider="MySessionStateStore"> <providers> <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="<youralias>-workshop-cache.redis.cache.windows.net" accessKey="<primarykey>" ssl="true" /> </providers> </sessionState>
system.web bölümünün başındaki <<sessionState mode="InProc" /> öğesini bulun ve açıklama satırı yapın:>
... <system.web> <compilation debug="true" targetFramework="4.7.2" /> <httpRuntime targetFramework="4.6.1" requestValidationMode="2.0" /> <!--sessionState mode="InProc" /--> ... </system.web>
Web uygulamasını Azure’a dağıtma
Çözüm Gezgini penceresinde Modeller klasörünü genişletin, Altyapı klasörünü genişletin ve ardından dbo.catalog_brand_hilo.Sequence.sql dosyasını seçin.
SQL dosyasında, dosyanın başındaki USE deyimini açıklama satırı yapın:
-- USE [Microsoft.eShopOnContainers.Services.CatalogDb] /****** Object: Sequence [dbo].[catalog_brand_hilo] Script Date: 16/08/2017 11:21:49 ******/ CREATE SEQUENCE [dbo].[catalog_brand_hilo] AS [bigint] START WITH 1 INCREMENT BY 10 MINVALUE -9223372036854775808 MAXVALUE 9223372036854775807 CACHE
dbo.catalog_hilo.Sequence.sql dosyası ve dbo.catalog_type_hilo.Sequence.sql dosyası için 2. adımı yineleyin. Tüm dosyaları kaydedin.
Not
Bu dosyalardaki betikler, veritabanına veriler sağlandığında çalıştırılır. Bu sağlama işlemi, uygulama yeni veritabanıyla ilk kez çalıştırıldığında otomatik olarak gerçekleşir. Açıklama satırı yaptığınız deyimler yalnızca uygulamayı yerel olarak çalıştırdığınızda gereklidir. Uygulama Azure SQL Server veritabanı kullanılarak çalıştırıldığında, kullanılacak veritabanı bağlantı dizesinin içinde belirtilir.
Şu anda Visual Studio’da Azure hesabınızda oturum açmamış durumdaysanız, araç çubuğunun sağ üst kısmındaki Oturum aç’ı seçin. Yönergeleri izleyin ve oturum açın.
Çözüm Gezgini penceresinde eShopLegacyWebForms projesine sağ tıklayıp Yayımla'yı seçin.
Daha önce web uygulamasını dağıtmadıysanız ve Azure SQL Veritabanı sunucusu bağlantısını yapılandırmadıysanız aşağıdaki alt adımları tamamlayın. Aksi takdirde 7. adıma geçin.
Azure PowerShell penceresine geri dönün. Aşağıdaki komutu çalıştırarak, bilgisayarınızın kurulum ünitesinde oluşturduğunuz Azure SQL Veritabanı sunucusuna erişmesini sağlayın. YourIPAddress değerini bilgisayarınızın genel IP adresiyle değiştirin.
New-AzSqlServerFirewallRule -ResourceGroupName $resourcegroupname -ServerName $servername -FirewallRuleName "AllowDesktop" -StartIpAddress YourIPAddress -EndIpAddress YourIPAddress
Not
Cloud Shell çalıştıran konağın IP adresini değil bilgisayarınızın IP adresini belirttiğinizden emin olun.
Visual Studio'da Yayımlama hedefi seçin penceresine dönün ve Azure Uygulaması Hizmet'i>seçin Varolan>Profil Oluştur'u seçin.
App Service penceresinde Azure aboneliğinizi seçin. Görünüm seçeneğini Kaynak türü olarak ayarlayın. Web Uygulaması’nı genişletin, kurulum ünitesinde oluşturduğunuz Azure web uygulamasını seçin ve Tamam’ı seçin.
Yayımla sayfasında Düzenle’yi seçin.
Yayımla iletişim kutusunun Bağlantı sayfasında İleri’yi seçin.
Ayarlar sayfasında, Uzak bağlantı dizesi metin kutusunun yanındaki üç nokta düğmesini (...) seçin.
Hedef Bağlan Ion Dizesi iletişim kutusunda, aşağıdaki tabloda yer alan değerleri belirtin ve Tamam'ı seçin.
Alan Value Data source Microsoft SQL Server (SqlClient) Sunucu adı $servername PowerShell değişkenindeki değeri belirtin. Sunucu adının sonuna .database.windows.net metnini ekleyin. Kimlik Doğrulaması SQL Server Kimlik Doğrulaması User name $serveradminname PowerShell değişkenindeki değeri belirtin. Parola $serveradminpassword PowerShell değişkenindeki değeri belirtin. Parolamı kaydet Seçili. Veritabanı adını seçin veya girin eShop Ayarlar sayfasına geri dönüp Çalışma zamanında bu bağlantı dizesi kullan (hedef web.config'i güncelleştir) seçeneğini belirleyin ve ardından Kaydet'i seçin.
Yayımla sayfasında Yayımla’yı seçin.
Web uygulamasının derlenmesini ve App Service’e dağıtılmasını bekleyin. Dağıtım tamamlandığında web uygulaması başlatılır ve Visual Studio bir web tarayıcısı açar. Web uygulamasının yerel olarak çalışırken olduğu gibi çalıştığını doğrulamak için web sitesine göz atın. Web uygulamasının sayfasını tarayıcıda açık bırakın.
Önbellek etkinliğini görüntüleme
Azure Portal’ında oturum açın.
Portalı göster menü düğmesini ve ardından Tüm kaynaklar'ı seçin.
Tüm kaynaklar sayfasında, daha önce oluşturmuş olduğunuz Redis için Azure Cache örneğini seçin. Useralias-workshop-cache> adını <alır.
Önbelleğin Genel Bakış bölmesinde Konsol’u seçin.
Redis Konsolu penceresindeki > istemde İzleyici yazın ve Enter tuşunu seçin.
Web uygulamasının tarayıcı penceresine dönün ve ürünlerin ayrıntılarına göz atın.
Not
Redis monitor komutu, önbelleği kullanan tüm işlemlerin performansını etkilediğinden, web uygulamasının normalden yavaş yanıt verdiğini fark edebilirsiniz. Bu monitor komutunu üretim sisteminde kullanmamalısınız.
Önbelleğin Redis Konsolu penceresine dönün. Ürünlere göz atarken gerçekleşen önbellek etkinliğini görüntüleyen iletilere sahip olmanız gerekir. _Data ve _Internal son eklerine sahip anahtarlar, oturum durumu bilgilerini tanımlar.
İzleme etkinliğini durdurmak için Enter tuşunu seçin.