Aracılığıyla paylaş


Azure Cloud Services (klasik) ve ASP.NET kullanmaya başlama

Genel Bakış

Önemli

Cloud Services (klasik), 1 Eylül 2024 itibarıyla tüm müşteriler için kullanım dışı bırakılmıştır. Çalışan tüm dağıtımlar Microsoft tarafından durdurulacak ve kapatılacak ve Veriler Ekim 2024'den itibaren kalıcı olarak kaybolacaktır. Yeni dağıtımlarda yeni Azure Resource Manager tabanlı dağıtım modeli Azure Cloud Services (genişletilmiş destek) kullanılmalıdır.

Bu öğreticide, ASP.NET Model-View-Controller (MVC) ön ucuyla çok katmanlı bir .NET uygulamasının nasıl oluşturulacağı ve bir Azure bulut hizmetine nasıl dağıtılacağı gösterilmektedir. Uygulama Azure SQL Veritabanı, Azure Blob hizmeti ve Azure Kuyruk hizmetini kullanır. Visual Studio projesini Microsoft Developer Network (MSDN) Kod Galerisi'nden indirebilirsiniz.

Öğreticide, uygulamayı yerel olarak oluşturup çalıştırma, Azure’a dağıtma ve bulutta çalıştırmanın yanı sıra sıfırdan oluşturma işlemleri de gösterilmektedir. Tercih ederseniz sıfırdan oluşturmaya başlayabilir ve ardından test ve dağıtım adımlarını gerçekleştirebilirsiniz.

Contoso Ads uygulaması

Uygulama bir reklam bülteni panosudur. Kullanıcılar metin girerek ve görüntüyü karşıya yükleyerek bir reklam oluşturur. Küçük resim görüntüleriyle birlikte bir reklam listesi görebilir ve ayrıntılarını görmek üzere bir reklam seçtiklerinde tam boyutlu görüntüyü görebilirler.

Reklam listesini gösteren resim

Uygulama, küçük resim oluşturma işleminin CPU yükünü azaltmak için kuyruk merkezli iş modelini bir arka uç süreçte kullanır.

Alternatif mimari: App Service ve Web İşleri

Bu öğreticide bir Azure bulut hizmetinde hem ön ucun hem de arka ucun nasıl çalıştırılacağı gösterilmektedir. Alternatif olarak Azure App Service'te ön ucu çalıştırabilir ve arka uç için Web İşleri özelliğini kullanabilirsiniz. WebJobs kullanan bir öğretici için bakın Azure WebJobs SDK'sını Kullanmaya Başlama. Senaryonuza en uygun hizmetleri seçme hakkında bilgi için bkz. Azure App Service, Cloud Services ve sanal makineler karşılaştırması.

Öğrenme hedefleri

  • Azure SDK’sını yükleyerek Azure dağıtımı için makinenizi etkinleştirme.
  • Bir ASP.NET MVC web rolü ve çalışan rolü ile Visual Studio bulut hizmeti projesi oluşturma.
  • Azure Depolama Öykünücüsü'ni kullanarak bulut hizmeti projesini yerel olarak test etme.
  • Bulut projesini bir Azure bulut hizmetinde yayımlama ve Azure Storage hesabını kullanarak test etme.
  • Dosyaları karşıya yükleme ve Azure Blob hizmetine depolama.
  • Katmanlar arasında iletişim için Azure Queue hizmetini kullanma.

Önkoşullar

Öğreticide web rolü ve çalışan rolü terminolojisi gibi Azure bulut hizmetleriyle ilgili temel kavramları anladığınız varsayılır. Ayrıca, Visual Studio'da ASP.NET MVC veya Web Forms projeleriyle çalışmayı bildiğiniz varsayılır. Örnek uygulama MVC kullanır, ancak öğreticinin büyük bölümü Web Forms için de geçerlidir.

Uygulamayı Azure aboneliği olmadan yerel olarak çalıştırabilirsiniz, ancak uygulamayı buluta dağıtmak için bir tane gerekir. Hesabınız yoksa MSDN abone avantajlarınızı etkinleştirebilir veya ücretsiz deneme sürümüne kaydolabilirsiniz.

Öğretici yönergeleri aşağıdaki ürünlerden herhangi biriyle çalışır:

  • Visual Studio 2013
  • Visual Studio 2015
  • Visual Studio 2017
  • Visual Studio 2019

Bunlardan birine sahip değilseniz Azure SDK'yı yüklediğinizde Visual Studio otomatik olarak yüklenebilir.

Uygulama mimarisi

Uygulama, tabloları oluşturmak ve verilere erişmek için Entity Framework Code First kullanarak reklamları bir SQL veritabanında depolar. Her reklam için veritabanı, biri tam boyutlu görüntü ve diğeri küçük resim olmak üzere iki URL depolar.

Bu, Bir Reklam tablosunun resmidir

Kullanıcı bir resmi karşıya yüklediğinde, web rolünde çalışan ön uç resmi bir Azure blobunda depolar ve reklam bilgilerini bloba işaret eden bir URL ile veritabanında depolar. Aynı zamanda bir Azure kuyruğuna ileti yazar. Bir çalışan rolünde çalışan arka uç işlemi, kuyruğu yeni iletiler için düzenli olarak yoklar. Yeni bir ileti görüntülendiğinde çalışan rolü bu görüntü için bir küçük resim oluşturur ve küçük resim URL'si veritabanı alanını bu reklam için güncelleştirir. Aşağıdaki diyagramda uygulama bölümlerinin nasıl etkileşim kurduğu gösterilmektedir.

Uygulama bölümlerinin nasıl etkileşim kurduğunu gösteren diyagram.

Geliştirme ortamını ayarlama

Başlamak için Visual Studio ve Azure SDK ile geliştirme ortamınızı ayarlayın.

Uyarı

Makinenizde zaten bulunan SDK bağımlılığı sayısına bağlı olarak, SDK'nın yüklenmesi uzun sürebilir (birkaç dakika ile yarım saat arasında).

Tamamlanan çözümü indirme ve çalıştırma

  1. Tamamlanmış çözümü indirin ve sıkıştırmasını açın.

  2. Visual Studio'yu başlatın.

  3. Dosya menüsünde Projeyi Aç'ı seçin, çözümü indirdiğiniz yere gidin ve çözüm dosyasını açın.

  4. Çözümü oluşturmak için CTRL+SHIFT+B tuşlarına basın.

    Varsayılan olarak, Visual Studio .zip dosyasına dahil olmayan NuGet paketi içeriğini otomatik olarak geri yükler. Paketler geri yüklenmiyorsa, Çözüm için NuGet Paketlerini Yönet iletişim kutusuna gidip sağ üstteki Geri Yükle düğmesine tıklayarak bunları el ile yükleyin.

  5. Çözüm Gezgini'nde, başlangıç projesi olarak ContosoAdsCloudService'in seçildiğinden emin olun.

  6. Visual Studio 2015 veya üzerini kullanıyorsanız ContosoAdsWeb projesinin uygulama Web.config dosyasında ve ContosoAdsCloudService projesinin ServiceConfiguration.Local.cscfg dosyasında SQL Server bağlantı dizesini değiştirin. Her iki örnekte de "(localdb)\v11.0" seçeneğini "(localdb)\MSSQLLocalDB" olarak değiştirin.

  7. Uygulamayı çalıştırmak için CTRL+F5 tuşlarına basın.

    Bir bulut hizmeti projesini yerel olarak çalıştırdığınızda, Visual Studio otomatik olarak Azure işlem öykünücüsü ve Azure depolama öykünücüsü çağırır. İşlem öykünücüsü, web rolü ve çalışan rolü ortamlarını benzetmek için bilgisayarınızın kaynaklarını kullanır. Depolama öykünücüsü, Azure bulut depolamanın benzetimini yapmak için bir SQL Server Express LocalDB veritabanı kullanır.

    Bir bulut hizmeti projesini ilk kez çalıştırdığınızda öykünücülerin başlatılması yaklaşık bir dakika sürer. Öykünücü başlatma tamamlandığında varsayılan tarayıcıda uygulama giriş sayfası açılır.

    Contoso Ads mimarisi 1

  8. Reklam Oluştur'u seçin.

  9. Test verilerini girin, karşıya yüklenecek .jpg bir görüntü seçin ve ardından Oluştur'u seçin.

    Resim, Sayfa oluştur'u gösterir

    Uygulama Dizin sayfasına gider, ancak bu işleme henüz gerçekleşmediğinden yeni reklamın küçük resmini göstermez.

  10. Biraz bekleyin ve ardından küçük resmi görmek için Dizin sayfasını yenileyin.

    Dizin sayfası

  11. Tam boyutlu resmi görmek için reklamınızın Ayrıntılar'ı seçin.

    Ayrıntılar sayfası

Uygulamayı herhangi bir bulut bağlantısı olmadan tamamen yerel bilgisayarınızda çalıştırıyorsunuz. Depolama öykünücüsü kuyruk ve blob verilerini bir SQL Server Express LocalDB veritabanına, uygulama ise reklam verilerini başka bir LocalDB veritabanına depolar. Entity Framework Code First, web uygulaması ilk kez erişmeye çalıştığında reklam veritabanını otomatik olarak oluşturmuştur.

Aşağıdaki bölümde, çözümü bulutta çalıştırıldığında kuyruklar, bloblar ve uygulama veritabanı için Azure bulut kaynaklarını kullanacak şekilde yapılandıracaksınız. Yerel olarak çalıştırmaya devam ederken bulut depolama alanını ve veritabanı kaynaklarını da kullanmak istiyorsanız bunu yapabilirsiniz. Bu, nasıl yapılacağını gördüğünüz bağlantı dizesi ayarlama meselesidir.

Uygulamayı Azure'a dağıtma

Uygulamayı bulutta çalıştırmak için aşağıdaki adımları uygulayın:

  • Bir Azure bulut hizmeti oluşturun.
  • Azure SQL Veritabanı'da bir veritabanı oluşturun.
  • Azure depolama hesabı oluşturun.
  • Çözümü Azure'da çalıştırıldığında veritabanınızı kullanacak şekilde yapılandırın.
  • Çözümünüzü Azure’da çalıştığında Azure Storage hesabınızı kullanacak şekilde yapılandırın.
  • Projeyi Azure bulut hizmetinize dağıtın.

Bir Azure bulut hizmeti oluşturma

Azure bulut hizmeti, uygulamanın çalıştığı ortamdır.

  1. Tarayıcınızda Azure portalını açın.

  2. Kaynak > Oluştur > İşlem Bulut Hizmeti'ni Seçin.

  3. Etki Alanı Adı Sistemi (DNS) adı giriş kutusuna bulut hizmeti için bir URL ön eki girin.

    Bu URL benzersiz olmalıdır. Seçtiğiniz ön ek zaten kullanılıyorsa bir hata iletisi alırsınız.

  4. Hizmet için yeni bir Kaynak grubu belirtin. Yeni oluştur'u seçin ve kaynak grubu giriş kutusuna CS_contososadsRG gibi bir ad yazın.

  5. Uygulamayı dağıtmak istediğiniz bölgeyi seçin.

    Bu alan, bulut hizmetinizin barındırıldığı veri merkezini belirtir. Bir üretim uygulaması için müşterilerinize en yakın bölgeyi seçmeniz gerekir. Bu öğretici için size en yakın bölgeyi seçin.

  6. Oluştur'u seçin.

    Aşağıdaki görüntüde bulut hizmeti CSvccontosoads.cloudapp.net URL’si ile oluşturulur.

    Yeni Bulut Hizmeti'ni gösteren görüntü

Azure SQL Veritabanı'nda veritabanı oluşturma

Uygulama bulutta çalıştırıldığında bulut tabanlı bir veritabanı kullanır.

  1. Azure portalında>>SQL Veritabanı seçin.

  2. Veritabanı Adı kutusuna contosoads girin.

  3. Kaynak grubundaVar olanı kullan'ı seçin ve bulut hizmeti için kullanılan kaynak grubunu seçin.

  4. Aşağıdaki görüntüde Sunucu - Gerekli ayarları yapılandır ve Yeni sunucu oluştur'u seçin.

    Veritabanı sunucusuna tünel oluşturma

    Alternatif olarak, aboneliğiniz zaten bir sunucuya sahipse aşağı açılan listeden bu sunucuyu seçebilirsiniz.

  5. Sunucu adı kutusuna csvccontosodbserver girin.

  6. Yönetici Oturum Açma Adı ve Parola girin.

    Yeni sunucu oluştur'u seçtiyseniz, buraya mevcut bir ad ve parola girmiyorsunuz. Daha sonra veritabanına eriştiğinizde kullanmak için şu anda tanımladığınız bir adı ve parolayı girersiniz. Daha önce oluşturduğunuz bir sunucuyu seçtiyseniz portal, önceden oluşturduğunuz yönetici kullanıcı hesabının parolasını ister.

  7. Bulut hizmeti için seçtiğiniz Konum'u seçin.

    Bulut hizmeti ve veritabanı farklı veri merkezlerinde (farklı bölgelerde) olduğunda gecikme süresi artar ve veri merkezi dışında bant genişliği için ücretlendirilirsiniz. Bir veri merkezi içinde bant genişliği ücretsizdir.

  8. Azure hizmetlerinin sunucuya erişmesine izin ver seçeneğini işaretleyin.

  9. Yeni sunucu için Seç'i seçin.

    Yeni sunucu

  10. Oluştur'u seçin.

Azure Depolama hesabı oluşturma

Azure Storage hesabı kuyruk ve blob verilerini buluta depolamaya yönelik kaynaklar sağlar.

Gerçek bir uygulamada genellikle uygulama verilerine karşı günlük verileri için ve test verilerine karşı üretim verileri için ayrı hesaplar oluşturursunuz. Bu öğreticide yalnızca bir hesap kullanırsınız.

  1. Azure portalındaKaynak > oluştur Depolama > hesabı - blob, dosya, tablo, kuyruk'u seçin.

  2. Ad alanına bir URL ön eki girin.

    Bu ön ek ve kutunun altında gördüğünüz metin, depolama hesabınızın benzersiz URL'sidir. Girdiğiniz ön ek zaten başka biri tarafından kullanılıyorsa farklı bir ön ek seçin.

  3. Dağıtım modeliniKlasik olarak ayarlayın.

  4. Çoğaltma açılır listesini Yerel yedekli depolama olarak ayarlayın.

    Bir depolama hesabı için coğrafi çoğaltma etkinleştirildiğinde, birincil konumda önemli bir olağanüstü durum oluşursa yük devretmeyi etkinleştirmek için depolanan içerik ikincil bir veri merkezine çoğaltılır. Coğrafi çoğaltma ek ücretlere neden olabilir. Test ve geliştirme hesaplarında genellikle coğrafi çoğaltma için ödeme yapmak istemezsiniz. Daha fazla bilgi için bkz. Depolama hesabı oluşturma, yönetme veya silme.

  5. Kaynak grubundaVar olanı kullan'ı seçin ve bulut hizmeti için kullanılan kaynak grubunu seçin.

  6. Konum açılan listesini bulut hizmeti için seçtiğiniz bölge olarak ayarlayın.

    Bulut hizmeti ve depolama hesabı farklı veri merkezlerinde (farklı bölgelerde) olduğunda gecikme süresi artar ve veri merkezi dışında bant genişliği için ücretlendirilirsiniz. Bir veri merkezi içinde bant genişliği ücretsizdir.

    Azure benzeşim grupları bir veri merkezinde bulunan kaynaklar arasındaki uzaklığı en aza indirmeye yönelik bir mekanizma sağlar. Bu öğreticide benşim grupları kullanılmaz. Daha fazla bilgi için bkz. Azure'da Benşim Grubu Oluşturma.

  7. Oluştur'u seçin.

    Yeni depolama hesabı

    Görüntüde csvccontosoads.core.windows.net URL’si ile bir depolama hesabı oluşturulmuştur.

Çözümü, Azure'da çalıştırıldığında veritabanınızı Azure SQL Veritabanı kullanacak şekilde yapılandırma

Web projesinin ve çalışan rolü projesinin her birinin kendi veritabanı bağlantı dizesi vardır ve uygulama Azure'da çalıştırıldığında her birinin Azure SQL Veritabanı'deki veritabanına işaret etmesi gerekir.

Web rolü için Web.config dönüşümünü ve çalışan rolü için bir bulut hizmeti ortamı ayarını kullanırsınız.

Uyarı

Bu ve sonraki bölümde, kimlik bilgilerini proje dosyalarında depolarsınız. Hassas verileri genel kaynak kodu depolarında depolamayın.

  1. ContosoAdsWeb projesinde uygulama Web.config dosyası için Web.Release.config dönüştürme dosyasını açın, öğe <connectionStrings> içeren açıklama bloğunu silin ve aşağıdaki kodu onun yerine yapıştırın.

    <connectionStrings>
        <add name="ContosoAdsContext" connectionString="{connectionstring}"
        providerName="System.Data.SqlClient" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
    

    Dosyayı düzenlemek için açık bırakın.

  2. Azure portalında sol bölmede SQL Veritabanları'nı seçin, bu öğretici için oluşturduğunuz veritabanını seçin ve ardından Bağlantı dizelerini göster'i seçin.

    Bağlantı dizelerini göster

    Portal, parola için bir yer tutucu ile birlikte bağlantı dizelerini gösterir.

    Bağlantı dizeleri

  3. Web.Release.config dönüştürme dosyasında, {connectionstring}'i silin ve yerine Azure portalından ADO.NET bağlantı dizesini yapıştırın.

  4. Bağlantı dizesinde, Web.Release.config dönüştürme dosyasına yapıştırdığınız {your_password_here} yerine yeni SQL veritabanı için oluşturduğunuz parolayı kullanın.

  5. Dosyayı kaydedin.

  6. Bağlantı dizesini (çevresindeki soru işaretleri olmadan) çalışan rolünü yapılandırmaya yönelik aşağıdaki adımlarda kullanılmak üzere seçip kopyalayın.

  7. Çözüm Gezgini'nde, bulut hizmeti projesindeki Roller altında ContosoAdsWorker'a sağ tıklayın ve Özellikler'i seçin.

    Özellikler menü seçeneğini vurgulayan ekran görüntüsü.

  8. Ayarlar sekmesini seçin.

  9. Hizmet YapılandırmasınıBulut olarak değiştirin.

  10. Ayarın Değer alanını ContosoAdsDbConnectionString seçin ve ardından öğreticinin önceki bölümünden kopyaladığınız bağlantı dizesini yapıştırın.

    Çalışan rolü için veritabanı bağlantı dizesi

  11. Değişikliklerinizi kaydedin.

Çözümünüzü Azure’da çalıştığında Azure Storage hesabınızı kullanacak şekilde yapılandırma

Hem web rolü projesinin hem de çalışan rolü projesinin Azure Storage hesabı bağlantı dizeleri, bulut hizmeti projesindeki ortam ayarlarına depolanır. Her proje için, uygulama yerel olarak çalıştırıldığında ve bulutta çalıştığında kullanılacak ayrı bir ayar kümesi vardır. Hem web hem de çalışan rolü projeleri için bulut ortamı ayarlarını güncelleştirirsiniz.

  1. Çözüm Gezgini'ndeContosoAdsCloudService projesindeki Roller altında ContosoAdsWeb'e sağ tıklayın ve Özellikler'i seçin.

    Rol özelliklerini gösteren görüntü

  2. Ayarlar sekmesini seçin. Hizmet Yapılandırması açılan kutusunda Bulut'u seçin.

    Bulut yapılandırması

  3. StorageConnectionString girişini seçtiğinizde, satırın sağ ucunda bir üç nokta (...) düğmesi görürsünüz. Depolama Bağlantı Dizesi Oluştur iletişim kutusunu açmak için üç nokta düğmesini seçin.

    Bağlantı Dizesi Oluştur kutusunu açma

  4. Depolama Bağlantı Dizesi Oluştur iletişim kutusunda Aboneliğiniz'i seçin, daha önce oluşturduğunuz depolama hesabını seçin ve ardından Tamam'ı seçin. Yine de oturum açmanız gerekiyorsa gezgin Sizden Azure hesabı kimlik bilgilerinizi ister.

    Depolama Bağlantı Dizesi Oluşturma

  5. Değişikliklerinizi kaydedin.

  6. StorageConnectionString bağlantı dizesini ayarlamak için Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString bağlantı dizesi için kullandığınız yordamın aynısını izleyin.

    Bu bağlantı dizesi günlüğe kaydetme için kullanılır.

  7. ContosoAdsWorker rolü için her iki bağlantı dizesini de ayarlamak üzere ContosoAdsWeb rolü için kullandığınız yordamı izleyin. Hizmet Yapılandırması'nınBulut olarak ayarlanmasını unutmayın.

Visual Studio kullanıcı arabirimini kullanarak yapılandırdığınız rol ortamı ayarları ContosoAdsCloudService projesinde aşağıdaki dosyalarda depolanır:

  • ServiceDefinition.csdef - Ayar adlarını tanımlar.
  • ServiceConfiguration.Cloud.cscfg - Uygulamanın bulutta çalıştığı zaman için değerler sağlar.
  • ServiceConfiguration.Local.cscfg - Uygulamanın yerel olarak çalıştığı zaman için değerler sağlar.

Örneğin, ServiceDefinition.csdef aşağıdaki tanımları içerir:

<ConfigurationSettings>
    <Setting name="StorageConnectionString" />
    <Setting name="ContosoAdsDbConnectionString" />
</ConfigurationSettings>

ServiceConfiguration.Cloud.cscfg dosyası, Visual Studio'da bu ayarlar için girdiğiniz değerleri içerir.

<Role name="ContosoAdsWorker">
    <Instances count="1" />
    <ConfigurationSettings>
        <Setting name="StorageConnectionString" value="{yourconnectionstring}" />
        <Setting name="ContosoAdsDbConnectionString" value="{yourconnectionstring}" />
        <!-- other settings not shown -->

    </ConfigurationSettings>
    <!-- other settings not shown -->

</Role>

ayarı, <Instances> Azure'ın çalışan rol kodunu çalıştırdığını sanal makine sayısını belirtir. Sonraki adımlar bölümünde bir bulut hizmetinin ölçeğini genişletme hakkında daha fazla bilgi için bağlantılar bulunur.

Projeyi Azure’a dağıtma

  1. Çözüm Gezgini'ndeContosoAdsCloudService bulut projesine sağ tıklayın ve yayımla'yı seçin.

    Yayımla menüsü

  2. Azure Uygulamasını Yayımla sihirbazının Oturum açma adımındaİleri'yi seçin.

    Oturum açma adımı

  3. Sihirbazın Ayarlar adımında İleri'yi seçin.

    Ayarlar adımı

    Gelişmiş sekmesindeki varsayılan ayarlar bu öğretici için uygundur. Gelişmiş sekme hakkında bilgi için bkz. Azure Uygulama Yayımlama Sihirbazı.

  4. Özet adımında Yayımla'yı seçin.

    Özet adımı

    Azure Etkinlik Günlüğü penceresi Visual Studio'da açılır.

  5. Dağıtım ayrıntılarını genişletmek için sağ ok simgesini seçin.

    Dağıtımın tamamlanması 5 dakika veya daha fazla sürebilir.

    Azure Etkinlik Günlüğü penceresi

  6. Dağıtım durumu tamamlandığında, uygulamayı başlatmak için Web uygulaması URL'sini seçin.

  7. Uygulamayı yerel olarak çalıştırdığınızda yaptığınız gibi reklam oluşturarak, görüntüleyerek ve bazılarını düzenleyerek uygulamayı test edebilirsiniz.

Uyarı

Testi tamamladığınızda bulut hizmetini silin veya durdurun. Bulut hizmeti kullanmıyorsanız bile onun için sanal makine kaynakları ayrılmış olduğundan ücretler tahakkuk eder. Ayrıca çalışır durumda bırakırsanız, URL’nizi bulan herhangi bir kişi reklam oluşturabilir ve görüntüleyebilir. Azure portalında bulut hizmetinizin Genel Bakış sekmesine gidin ve sayfanın üst kısmındaki Sil düğmesine tıklayın. Yalnızca başkalarının siteye erişmesini geçici olarak engellemek istiyorsanız, bunun yerine Durdur'a tıklayın. Bu durumda ücretler tahakkuk etmeye devam eder. Artık ihtiyacınız kalmadığında SQL veritabanını ve depolama hesabını silmek için benzer bir yordamı izleyebilirsiniz.

Uygulamayı sıfırdan oluşturma

Tamamlanmış uygulamayı hala indirmeniz gerekiyorsa, bunu şimdi yapın. İndirilen projedeki dosyaları yeni projeye kopyalayın.

Contoso Ads uygulamasının oluşturulması aşağıdaki adımları içerir:

  • Bir bulut hizmeti Visual Studio çözümü oluşturun.
  • NuGet paketlerini güncelleştirin ve ekleyin.
  • Proje başvurularını ayarlayın.
  • Bağlantı dizelerini yapılandırma.
  • Kod dosyaları ekleyin.

Çözüm oluşturulduktan sonra bulut hizmeti projelerinde ve Azure blob'ları ile kuyruklarda benzersiz olan kodu gözden geçirin.

Bir bulut hizmeti Visual Studio çözümü oluşturma

  1. Visual Studio'da Dosyamenüsünden Yeni Proje'yi seçin.

  2. Yeni Proje iletişim kutusunun sol bölmesinde Visual C# öğesini genişletin, Bulut şablonları'nı ve ardından Azure Bulut Hizmeti şablonunu seçin.

  3. Projeyi ve çözümü ContosoAdsCloudService olarak adlandırın ve tamam'ı seçin.

    Yeni Proje

  4. Yeni Azure Bulut Hizmeti iletişim kutusunda bir web rolü ve çalışan rolü ekleyin. Web rolünü ContosoAdsWeb olarak ve çalışan rolünü ContosoAdsWorker olarak adlandırın. (Rollerin varsayılan adlarını değiştirmek için sağ bölmedeki kurşun kalem simgesini kullanın.)

    Yeni Bulut Hizmeti Projesi

  5. Web rolü için Yeni ASP.NET Projesi iletişim kutusunu gördüğünüzde, MVC şablonunu ve ardından Kimlik Doğrulamasını Değiştir'i seçin.

    Kimlik Doğrulamayı Değiştir

  6. Kimlik Doğrulamasını Değiştir iletişim kutusunda Kimlik Doğrulaması Yok'u ve ardından Tamam'ı seçin.

    Kimlik Doğrulaması Yok

  7. Yeni ASP.NET Projesi iletişim kutusunda Tamam'ı seçin.

  8. Çözüm Gezgini'nde çözüme (projelerden birine değil) sağ tıklayın ve Ekle - Yeni Proje'yi seçin.

  9. Yeni Proje Ekle iletişim kutusunda, sol bölmedeki Visual C# altında Windows'u seçin ve ardından Sınıf Kitaplığı şablonunu seçin.

  10. Projeyi ContosoAdsCommon olarak adlandırın ve tamam'ı seçin.

    Entity Framework bağlamına ve hem web hem de çalışan rolü projelerindeki veri modeline başvurmanız gerekir. Alternatif olarak, web rolü projesinde EF ile ilgili sınıfları tanımlayabilir ve çalışan rolü projesinde bu projeye başvurabilirsiniz. Ancak, alternatif yaklaşımda çalışan rolü projeniz gerekli olmayan web bütünleştirme kodlarına başvuruda bulunur.

NuGet paketlerini güncelleştirme ve ekleme

  1. Çözüm için NuGet Paketlerini Yönet iletişim kutusunu açın.

  2. Pencerenin üst kısmında Güncelleştirmeler'i seçin.

  3. WindowsAzure.Storage paketini arayın ve listede varsa, paketi seçin, güncelleştirilecek web ve çalışan projelerini seçin ve ardından Güncelleştir'i seçin.

    Depolama istemci kitaplığı Visual Studio proje şablonlarından daha sık güncelleştirilir, bu nedenle yeni oluşturulan bir projedeki sürümün güncelleştirilmesi gerektiğini fark edebilirsiniz.

  4. Pencerenin üst kısmında gözat'ı seçin.

  5. EntityFramework NuGet paketini bulun ve üç projede de yükleyin.

  6. Microsoft.WindowsAzure.ConfigurationManager NuGet paketini bulun ve çalışan rolü projesine yükleyin.

Proje başvurularını ayarlama

  1. ContosoAdsWeb projesinde ContosoAdsCommon projesine bir başvuru ayarlayın. ContosoAdsWeb projesine sağ tıklayın ve başvurular - Başvuru Ekle'yi seçin. Başvuru Yöneticisi iletişim kutusunda sol bölmede Çözüm – Projeler'i, ContosoAdsCommon'ı ve ardından Tamam'ı seçin.

  2. ContosoAdsWorker projesinde ContosoAdsCommon projesine bir başvuru ayarlayın.

    ContosoAdsCommon, hem ön ucu hem de arka ucu kullanan Entity Framework veri modelini ve bağlam sınıfını içerir.

  3. ContosoAdsWorker projesinde bir System.Drawing başvurusu ayarlayın.

    Bu bütünleştirilmiş kod, görüntüleri küçük resimlere dönüştürmek için arka uç tarafından kullanılır.

Bağlantı dizelerini yapılandırma

Bu bölümde, yerel olarak test etmek amacıyla Azure Storage ve SQL bağlantı dizelerini yapılandırırsınız. Öğreticinin önceki bölümlerinde verilen dağıtım yönergeleri, uygulamanın bulutta çalıştığı durumlar için bağlantı dizelerinin nasıl ayarlandığını açıklamaktadır.

  1. ContosoAdsWeb projesinde uygulamanın Web.config dosyasını açın ve aşağıdaki connectionStrings öğesini configSections öğesinden sonra ekleyin.

    <connectionStrings>
        <add name="ContosoAdsContext" connectionString="Data Source=(localdb)\v11.0; Initial Catalog=ContosoAds; Integrated Security=True; MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
    </connectionStrings>
    

    Visual Studio 2015 ve sonraki bir sürümü kullanıyorsanız "v11.0" ifadesini "MSSQLLocalDB" ile değiştirin.

  2. Değişikliklerinizi kaydedin.

  3. ContosoAdsCloudService projesinde Roller altında ContosoAdsWeb'e sağ tıklayın ve Özellikler'i seçin.

    Rol özellikleri resmi

  4. ContosoAdsWeb [Rol] özellikleri penceresinde Ayarlar sekmesini ve ardından Ayar Ekle'yi seçin.

    Hizmet Yapılandırması'nınTüm Yapılandırmalar olarak ayarlanmasını sağlayın.

  5. StorageConnectionString adlı bir ayar ekleyin. Type değeriniConnectionString olarak, Value değeriniuseDevelopmentStorage=true olarak ayarlayın.

    Yeni bağlantı dizesi

  6. Değişikliklerinizi kaydedin.

  7. ContosoAdsWorker rol özelliklerine bir depolama bağlantı dizesi eklemek için aynı yordamı izleyin.

  8. ContosoAdsWorker [Rol] özellikleri penceresindeyken başka bir bağlantı dizesi ekleyin:

    • Ad: ContosoAdsDbConnectionString

    • Tür: Dizgi

    • Değer: Web rolü projesi kullandığınız bağlantı dizesinin aynısını yapıştırın. (Aşağıdaki örnek Visual Studio 2013 içindir. Bu örneği kopyalayıp Visual Studio 2015 veya üzerini kullanıyorsanız Veri Kaynağı'nı değiştirmeyi unutmayın.)

      Data Source=(localdb)\v11.0; Initial Catalog=ContosoAds; Integrated Security=True; MultipleActiveResultSets=True;
      

Kod dosyaları ekleme

Bu bölümde, indirilen çözümden yeni çözüme kod dosyaları kopyalarsınız. Aşağıdaki bölümlerde bu kodun önemli bölümleri gösterilir ve açıklanır.

Bir projeye veya klasöre dosya eklemek için projeye veya klasöre sağ tıklayın veVarolan ÖğeyiEkle'yi - seçin. İstediğiniz dosyaları seçin ve ardından Ekle'yi seçin. Mevcut dosyaları değiştirmek isteyip istemediğiniz sorulursa Evet'i seçin.

  1. ContosoAdsCommon projesinde , Class1.cs dosyasını silin ve indirilen projeden Ad.cs ve ContosoAdscontext.cs dosyalarını ekleyin.

  2. ContosoAdsWeb projesinde indirilen projeden aşağıdaki dosyaları ekleyin.

    • Global.asax.cs.
    • Views\Shared klasöründe: _Layout.cshtml.
    • Views\Home klasöründe: Index.cshtml.
    • Denetleyiciler klasöründe: AdController.cs.
    • Views\Ad klasöründe (önce klasörü oluşturun): beş .cshtml dosyası.
  3. ContosoAdsWorker projesinde, indirilen projeden WorkerRole.cs ekleyin.

Artık öğreticinin önceki bölümlerinde açıklandığı gibi uygulamayı derleyip çalıştırabilirsiniz ve uygulama yerel veritabanı ve depolama öykünücüsü kaynaklarını kullanır.

Aşağıdaki bölümlerde Azure ortamı, blob'ları ve kuyrukları ile çalışmayla ilgili kod açıklanmaktadır. Bu öğreticide yapı iskelesi kullanarak MVC denetleyicileri ve görünümleri oluşturma, SQL Server veritabanlarıyla çalışan Entity Framework kodu yazma veya ASP.NET 4.5'te zaman uyumsuz programlamanın temelleri açıklanmamıştır. Bu konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:

ContosoAdsCommon - Ad.cs

Ad.cs dosyası reklam kategorileri için bir numaralandırma ve reklam bilgileri için bir POCO varlık sınıfı tanımlar.

public enum Category
{
    Cars,
    [Display(Name="Real Estate")]
    RealEstate,
    [Display(Name = "Free Stuff")]
    FreeStuff
}

public class Ad
{
    public int AdId { get; set; }

    [StringLength(100)]
    public string Title { get; set; }

    public int Price { get; set; }

    [StringLength(1000)]
    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    [StringLength(1000)]
    [DisplayName("Full-size Image")]
    public string ImageURL { get; set; }

    [StringLength(1000)]
    [DisplayName("Thumbnail")]
    public string ThumbnailURL { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime PostedDate { get; set; }

    public Category? Category { get; set; }
    [StringLength(12)]
    public string Phone { get; set; }
}

ContosoAdsCommon - ContosoAdsContext.cs

ContosoAdsContext sınıfı, Ad sınıfının Entity Framework'ün sql veritabanında depoladığı DbSet koleksiyonunda kullanıldığını belirtir.

public class ContosoAdsContext : DbContext
{
    public ContosoAdsContext() : base("name=ContosoAdsContext")
    {
    }
    public ContosoAdsContext(string connString)
        : base(connString)
    {
    }
    public System.Data.Entity.DbSet<Ad> Ads { get; set; }
}

Sınıfın iki oluşturucusu vardır. Birincisi web projesi tarafından kullanılır ve Web.config dosyasına depolanan bir bağlantı dizesinin adını belirtir. İkinci oluşturucu, Web.config dosyasına sahip olmadığı için çalışan rolü projesi tarafından kullanılan gerçek bağlantı dizesini geçirmenizi sağlar. Bu bağlantı dizesi nerede depolandığını daha önce gördünüz. Daha sonra, dbContext sınıfı örneği oluşturduğunda kodun bağlantı dizesi nasıl aldırdiğini görürsünüz.

ContosoAdsWeb - Global.asax.cs

Application_Start yönteminden çağrılan kod, henüz yoksa birer adet images blob kapsayıcısı ve images kuyruğu oluşturur. Bu kod, yeni bir depolama hesabı kullandığınızda veya yeni bir bilgisayarda depolama öykünücüsü kullandığınızda kodun gerekli blob kapsayıcısını ve kuyruğu otomatik olarak oluşturmasını sağlar.

Kod, .cscfg dosyasındaki depolama bağlantı dizesini kullanarak depolama hesabına erişim elde eder.

var storageAccount = CloudStorageAccount.Parse
    (RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString"));

Ardından images blob kapsayıcısına bir referans edinir, henüz yoksa kapsayıcıyı oluşturur ve yeni kapsayıcı için erişim izinlerini ayarlar. Varsayılan olarak, yeni kapsayıcılar yalnızca depolama hesabı kimlik bilgilerine sahip istemcilerin blob’lara erişmesine izin verir. Web sitesi, görüntü blob’larını işaret eden URL’leri kullanarak görüntüleri gösterebilmek için blob’ların herkese açık olmasını gerektirir.

var blobClient = storageAccount.CreateCloudBlobClient();
var imagesBlobContainer = blobClient.GetContainerReference("images");
if (imagesBlobContainer.CreateIfNotExists())
{
    imagesBlobContainer.SetPermissions(
        new BlobContainerPermissions
        {
            PublicAccess =BlobContainerPublicAccessType.Blob
        });
}

Benzer kod görüntüler kuyruğuna başvuru alır ve yeni bir kuyruk oluşturur. Bu durumda hiçbir izin değişikliğine gerek yoktur.

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
var imagesQueue = queueClient.GetQueueReference("images");
imagesQueue.CreateIfNotExists();

ContosoAdsWeb - _Layout.cshtml

_Layout.cshtml dosyası üst bilgi ve alt bilgide uygulama adını ayarlar ve bir "Reklamlar" menü girdisi oluşturur.

ContosoAdsWeb - Görünümler\Giriş\Dizin.cshtml

Views\Home\Index.cshtml dosyası, giriş sayfasında kategori bağlantılarını görüntüler. Bağlantılar Category numaralandırmasının bir sorgu dizesi değişkeni içindeki tamsayı değerini Reklam Dizini sayfasına geçirir.

<li>@Html.ActionLink("Cars", "Index", "Ad", new { category = (int)Category.Cars }, null)</li>
<li>@Html.ActionLink("Real estate", "Index", "Ad", new { category = (int)Category.RealEstate }, null)</li>
<li>@Html.ActionLink("Free stuff", "Index", "Ad", new { category = (int)Category.FreeStuff }, null)</li>
<li>@Html.ActionLink("All", "Index", "Ad", null, null)</li>

ContosoAdsWeb - AdController.cs

AdController.cs dosyasında oluşturucu, bloblar ve kuyruklarla çalışmak için bir API sağlayan Azure Depolama İstemci Kitaplığı nesneleri oluşturmak için yöntemini çağırırInitializeStorage.

Daha sonra kod, daha önce Global.asax.cs içinde gördüğünüz images blob kapsayıcısına bir başvuru alır. Bunu yaparken, bir web uygulaması için uygun bir varsayılan yeniden deneme ilkesi ayarlar. Varsayılan üstel geri alma yeniden deneme ilkesi, web uygulamasının geçici bir hata için tekrarlanan yeniden denemelerde bir dakikadan daha uzun süre yanıt vermeyi durdurmasına neden olabilir. Burada belirtilen yeniden deneme ilkesi üç denemeye kadar her denemeden sonra en fazla üç saniye bekler.

var blobClient = storageAccount.CreateCloudBlobClient();
blobClient.DefaultRequestOptions.RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(3), 3);
imagesBlobContainer = blobClient.GetContainerReference("images");

Benzer kod görüntüler kuyruğuna başvuru alır.

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
queueClient.DefaultRequestOptions.RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(3), 3);
imagesQueue = queueClient.GetQueueReference("images");

Denetleyici kodlarının birçoğu bir DbContext sınıfı kullanarak Entity Framework veri modeli ile çalışmak için tipiktir. Dosyayı karşıya yükleyen ve blob depolama alanına kaydeden HttpPost Create yöntemi bunun bir istisnasıdır. Model bağlayıcısı yöntemine bir HttpPostedFileBase nesnesi sağlar.

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(
    [Bind(Include = "Title,Price,Description,Category,Phone")] Ad ad,
    HttpPostedFileBase imageFile)

Kullanıcı karşıya yüklemek için bir dosya seçtiyse kod bu dosyayı karşıya yükler, bir blob'a kaydeder ve Ad veritabanı kaydını blob’a işaret eden bir URL ile güncelleştirir.

if (imageFile != null && imageFile.ContentLength != 0)
{
    blob = await UploadAndSaveBlobAsync(imageFile);
    ad.ImageURL = blob.Uri.ToString();
}

Karşıya yüklemeyi yapan kod UploadAndSaveBlobAsync yöntemindedir. Blob için bir GUID adı oluşturur, dosyayı karşıya yükler ve kaydeder ve kaydedilmiş blob için bir başvuru döndürür.

private async Task<CloudBlockBlob> UploadAndSaveBlobAsync(HttpPostedFileBase imageFile)
{
    string blobName = Guid.NewGuid().ToString() + Path.GetExtension(imageFile.FileName);
    CloudBlockBlob imageBlob = imagesBlobContainer.GetBlockBlobReference(blobName);
    using (var fileStream = imageFile.InputStream)
    {
        await imageBlob.UploadFromStreamAsync(fileStream);
    }
    return imageBlob;
}

HttpPost Create yöntemi bir blob’u karşıya yükleyip veritabanını güncelleştirdikten sonra bir görüntünün küçük resme dönüştürme için hazır olduğunu ilgili arka uç işlemine bildirmek üzere bir kuyruk iletisi oluşturur.

string queueMessageString = ad.AdId.ToString();
var queueMessage = new CloudQueueMessage(queueMessageString);
await queue.AddMessageAsync(queueMessage);

Kullanıcının yeni bir görüntü dosyası seçtiği durumlarda zaten mevcut blob’ların silinmesinin gerekli olması dışında HttpPost Edit yönteminin kodu aynıdır.

if (imageFile != null && imageFile.ContentLength != 0)
{
    await DeleteAdBlobsAsync(ad);
    imageBlob = await UploadAndSaveBlobAsync(imageFile);
    ad.ImageURL = imageBlob.Uri.ToString();
}

Sonraki örnekte bir reklamı sildiğinizde blob'ları silen kod gösterilmektedir.

private async Task DeleteAdBlobsAsync(Ad ad)
{
    if (!string.IsNullOrWhiteSpace(ad.ImageURL))
    {
        Uri blobUri = new Uri(ad.ImageURL);
        await DeleteAdBlobAsync(blobUri);
    }
    if (!string.IsNullOrWhiteSpace(ad.ThumbnailURL))
    {
        Uri blobUri = new Uri(ad.ThumbnailURL);
        await DeleteAdBlobAsync(blobUri);
    }
}
private static async Task DeleteAdBlobAsync(Uri blobUri)
{
    string blobName = blobUri.Segments[blobUri.Segments.Length - 1];
    CloudBlockBlob blobToDelete = imagesBlobContainer.GetBlockBlobReference(blobName);
    await blobToDelete.DeleteAsync();
}

ContosoAdsWeb - Views\Ad\Index.cshtml ve Details.cshtml

Index.cshtml dosyasında diğer reklam verileriyle birlikte küçük resimler görüntülenir.

<img src="@Html.Raw(item.ThumbnailURL)" />

Details.cshtml dosyasında tam boyutlu görüntü görüntülenir.

<img src="@Html.Raw(Model.ImageURL)" />

ContosoAdsWeb - Views\Ad\Create.cshtml ve Edit.cshtml

Create.cshtml ve Edit.cshtml dosyaları, denetleyicinin nesneyi almasına olanak tanıyan form kodlamasını HttpPostedFileBase belirtir.

@using (Html.BeginForm("Create", "Ad", FormMethod.Post, new { enctype = "multipart/form-data" }))

Bir <input> öğesi tarayıcıya bir dosya seçme iletişim kutusu açmasını söyler.

<input type="file" name="imageFile" accept="image/*" class="form-control fileupload" />

ContosoAdsWorker - WorkerRole.cs - OnStart yöntemi

Azure çalışan rolü ortamı, çalışan rolü başlatılırken OnStart sınıfındaki WorkerRole yöntemini, Run yöntemi tamamlandığında ise OnStart yöntemini çağırır.

OnStart yöntemi veritabanı bağlantı dizesini .cscfg dosyasından alır ve Entity Framework DbContext sınıfına geçirir. SQLClient sağlayıcısı varsayılan olarak kullanıldığından sağlayıcının belirtilmesi gerekmez.

var dbConnString = CloudConfigurationManager.GetSetting("ContosoAdsDbConnectionString");
db = new ContosoAdsContext(dbConnString);

Bundan sonra yöntem, depolama hesabı için bir başvuru alır ve yoksa blob kapsayıcısı ve kuyruk oluşturur. Bunun kodu, web rolü Application_Start yönteminde daha önce gördüğünüzle aynıdır.

ContosoAdsWorker - WorkerRole.cs - Run yöntemi

Run yöntemi başlatma işini tamamladığında OnStart yöntemi çağrılır. Yöntem yeni bir kuyruk iletisi bekleyen ve ulaşan iletileri işleyen sonsuz bir döngü yürütür.

public override void Run()
{
    CloudQueueMessage msg = null;

    while (true)
    {
        try
        {
            msg = this.imagesQueue.GetMessage();
            if (msg != null)
            {
                ProcessQueueMessage(msg);
            }
            else
            {
                System.Threading.Thread.Sleep(1000);
            }
        }
        catch (StorageException e)
        {
            if (msg != null && msg.DequeueCount > 5)
            {
                this.imagesQueue.DeleteMessage(msg);
            }
            System.Threading.Thread.Sleep(5000);
        }
    }
}

Döngünün her yinelemesinden sonra herhangi bir kuyruk iletisi bulunmazsa program bir saniye için uyku moduna geçer. Bu uyku, çalışan rolünün aşırı CPU süresi ve depolama işlemi maliyetlerine neden olmasını önler. Microsoft Müşteri Danışmanlığı Ekibi, bu uyku işlevini eklemeyi unutan, üretime dağıtılan ve tatil için ayrılan bir geliştirici hakkında bir hikaye anlatıyor. Geri döndüklerinde gözetimleri tatilden daha pahalıya mal oluyor.

Bazı durumlarda bir kuyruk iletisinin içeriği işlemede hataya neden olur. Bu tür bir ileti zehirli ileti olarak adlandırılır. Yalnızca bir hata günlüğe kaydedip döngüye yeniden başlattıysanız, bu iletiyi sonsuz bir şekilde işlemeyi deneyebilirsiniz. Bu nedenle, catch bloğu, uygulamanın geçerli iletiyi kaç kez işlemeye çalıştığını kontrol eden bir if deyimi içerir. Sayı beşten fazlaysa, ileti kuyruktan silinir.

Bir kuyruk iletisi bulunduğunda ProcessQueueMessage çağrılır.

private void ProcessQueueMessage(CloudQueueMessage msg)
{
    var adId = int.Parse(msg.AsString);
    Ad ad = db.Ads.Find(adId);
    if (ad == null)
    {
        throw new Exception(String.Format("AdId {0} not found, can't create thumbnail", adId.ToString()));
    }

    CloudBlockBlob inputBlob = this.imagesBlobContainer.GetBlockBlobReference(ad.ImageURL);

    string thumbnailName = Path.GetFileNameWithoutExtension(inputBlob.Name) + "thumb.jpg";
    CloudBlockBlob outputBlob = this.imagesBlobContainer.GetBlockBlobReference(thumbnailName);

    using (Stream input = inputBlob.OpenRead())
    using (Stream output = outputBlob.OpenWrite())
    {
        ConvertImageToThumbnailJPG(input, output);
        outputBlob.Properties.ContentType = "image/jpeg";
    }

    ad.ThumbnailURL = outputBlob.Uri.ToString();
    db.SaveChanges();

    this.imagesQueue.DeleteMessage(msg);
}

Bu kod, görüntü URL’sini almak için veritabanını okur, görüntüyü bir küçük resme dönüştürür, küçük resmi bir blob’a kaydeder, veritabanını küçük resim blob URL’si ile güncelleştirir ve kuyruk iletisini siler.

Uyarı

ConvertImageToThumbnailJPG yöntemindeki kod kolaylık için System.Drawing ad alanındaki sınıfları kullanır. Ancak, bu ad alanındaki sınıflar Windows Forms ile kullanılmak üzere tasarlanmıştır. Bir Windows veya ASP.NET hizmetinde kullanılması desteklenmez. Görüntü işleme seçenekleri hakkında daha fazla bilgi için bkz. Dinamik Görüntü Oluşturma ve Derin İç Görüntü Yeniden Boyutlandırma.

Sorun giderme

Bu öğreticideki yönergeleri izlerken bir sorun oluşması durumunda bazı yaygın hatalar ve çözümleri aşağıda verilmiştir.

HizmetÇalışmaZamanı.RolOrtamıİstisnası

RoleEnvironment Nesnesi, Azure'da bir uygulama çalıştırdığınızda veya Azure İşlem Öykünücüsü'ni kullanarak yerel olarak çalıştırdığınızda Azure tarafından sağlanır. Yerel olarak çalışırken bu hatayı alırsanız ContosoAdsCloudService projesini başlangıç projesi olarak ayarladığınızdan emin olun. Bu ayar, projenin Azure İşlem Öykünücüsü kullanılarak çalıştırılmasını sağlar.

Uygulamanın Azure RoleEnvironment'ı kullandığı şeylerden biri ,.cscfg dosyalarında depolanan bağlantı dizesi değerlerini almaktır, bu nedenle bu özel durumun bir diğer nedeni de eksik bağlantı dizesidir. ContosoAdsWeb projesinde hem Bulut hem de Yerel yapılandırmaları için StorageConnectionString ayarını oluşturduğunuzdan ve ContosoAdsWorker projesinde her iki yapılandırma için iki bağlantı dizesini de oluşturduğunuzdan emin olun. Çözümün tamamında StorageConnectionString için Tümünü Bul araması yaparsanız, bunu altı dosyada dokuz kez görmeniz gerekir.

xxx bağlantı noktası geçersiz kılınamıyor. Yeni bağlantı noktası http protokolü için izin verilen en düşük 8080 değerinin altında

Web projesi tarafından kullanılan bağlantı noktası numarasını değiştirmeyi deneyin. ContosoAdsWeb projesine sağ tıklayın ve özellikler'i seçin. Web sekmesini seçin ve ardından Proje Url'si ayarındaki bağlantı noktası numarasını değiştirin.

Sorunu çözebilecek başka bir alternatif için sonraki bölüme bakın.

Yerel olarak çalışırken oluşan diğer hatalar

Varsayılan olarak yeni bulut hizmeti projeleri, Azure ortamının benzetimini yapmak için Azure İşlem Öykünücüsü express kullanır. Azure İşlem Öykünücüsü, tam işlem öykünücüsünün basit bir sürümüdür ve bazı koşullarda hızlı sürüm çalışmadığında tam öykünücü çalışır.

Projeyi tam öykünücüyü kullanacak şekilde değiştirmek için ContosoAdsCloudService projesine sağ tıklayın ve özellikler'i seçin. Özellikler penceresinde Web sekmesini ve ardından Tam Öykünücü kullan radyo düğmesini seçin.

Uygulamayı tam öykünücü ile çalıştırmak için Visual Studio’yu yönetici ayrıcalıklarıyla açmanız gerekir.

Sonraki Adımlar

Contoso Ads uygulaması, başlangıç öğreticisi için kasıtlı olarak basitleştirildi. Örneğin, bağımlılık ekleme veya depo ve iş birimi desenlerini uygulamaz. Günlük kaydı için bir arabirim kullanmaz, veri modeli değişikliklerini yönetmek için EF Code First Migrations veya geçici ağ hatalarını yönetmek için EF Connection Resiliency kullanmaz ve benzeri.

Bulut için geliştirme hakkında genel bilgi için bkz. Azure ile Real-World Cloud Apps Oluşturma.

Daha fazla bilgi için aşağıdaki kaynaklara bakın: