Udostępnij za pośrednictwem


Rozpoczynanie pracy z usługami Azure Cloud Services (wersja klasyczna) i ASP.NET

Omówienie

Ważne

Usługi Cloud Services (wersja klasyczna) są teraz przestarzałe dla wszystkich klientów od 1 września 2024 r. Wszystkie istniejące uruchomione wdrożenia zostaną zatrzymane i zamknięte przez firmę Microsoft, a dane zostaną trwale utracone od października 2024 r. Nowe wdrożenia powinny używać nowego modelu wdrażania opartego na usłudze Azure Resource Manager w usługach Azure Cloud Services (wsparcie dodatkowe).

W tym samouczku pokazano, jak utworzyć wielowarstwową aplikację .NET z frontonem ASP.NET Model-View-Controller (MVC) i wdrożyć ją w usłudze w chmurze platformy Azure. Aplikacja używa bazy danych Azure SQL Database, usługi obiektów blob platformy Azure i usługi kolejek platformy Azure. Projekt programu Visual Studio można pobrać z galerii kodu microsoft Developer Network (MSDN).

W samouczku opisano, jak utworzyć i uruchomić aplikację lokalnie, jak wdrożyć ją na platformie Azure i uruchomić w chmurze oraz jak utworzyć ją od samego początku. Można również rozpocząć od kompilowania aplikacji od początku, a dopiero później przeprowadzić testowanie i wdrażanie.

Aplikacja Contoso Ads

Ta aplikacja to reklamowa tablica ogłoszeń. Aby utworzyć reklamę, użytkownicy muszą wpisać tekst i przesłać obraz. Mogą przeglądać listę reklam z miniaturami obrazów, a także zobaczyć pełny obraz po kliknięciu reklamy w celu wyświetlenia jej szczegółów.

Obraz przedstawiający listę reklam

Aplikacja korzysta z przetwarzania kolejkowego, aby przekazać obciążające procesor zadania związane z tworzeniem miniatur do procesu zaplecza.

Architektura alternatywna: usługi App Service i zadania WebJob

Ten samouczek pokazuje, jak uruchamiać fronton i zaplecze w usłudze w chmurze Azure. Alternatywą jest uruchomienie frontonu w usłudze Azure App Service i używanie funkcji zadań WebJob dla zaplecza. Aby zapoznać się z samouczkiem korzystającym z zadań WebJob, zobacz artykuł Wprowadzenie do zestawu SDK zadań WebJob na platformie Azure. Informacje o wybieraniu usług najlepiej spełniających potrzeby scenariusza zawiera artykuł Porównanie usług Azure App Service, Cloud Services i Virtual Machines.

Cele szkoleniowe

  • Jak umożliwić tworzenie aplikacji platformy Azure na komputerze przez zainstalowanie zestawu Azure SDK.
  • Jak utworzyć projekt usługi w chmurze programu Visual Studio z rolą Proces roboczy i rolą Sieć Web kontrolera ASP.NET MVC.
  • Jak przetestować projekt usługi w chmurze lokalnie przy użyciu emulatora usługi Azure Storage.
  • Jak opublikować projekt chmury w usłudze w chmurze platformy Azure i przetestować go przy użyciu konta magazynu platformy Azure.
  • Jak przekazywać pliki i przechowywać je w usłudze obiektów blob platformy Azure.
  • Jak komunikować się między warstwami przy użyciu usługi kolejek platformy Azure.

Wymagania wstępne

W samouczku przyjęto założenie, że znasz podstawowe pojęcia dotyczące usług w chmurze Azure, takie jak terminologia związana z rolą Sieć Web i rolą Proces roboczy. Założono również, że wiesz, jak pracować z projektami ASP.NET MVC lub formularzami sieci Web w programie Visual Studio. Przykładowa aplikacja korzysta z kontrolera MVC, jednak większość treści samouczka odnosi się również do formularzy sieci Web.

Aplikację można uruchamiać lokalnie bez subskrypcji platformy Azure, ale musisz wdrożyć aplikację w chmurze. Jeśli nie masz konta, możesz aktywować korzyści dla subskrybentów MSDN lub utworzyć konto bezpłatnej wersji próbnej.

Instrukcje samouczka działają z dowolnym z następujących produktów:

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

Jeśli nie masz żadnego z tych programów, podczas instalowania zestawu Azure SDK program Visual Studio może zostać zainstalowany automatycznie.

Architektura aplikacji

Aplikacja przechowuje reklamy w bazie danych SQL przy użyciu programu Entity Framework Code First, aby utworzyć tabele i uzyskać dostęp do danych. W przypadku każdej reklamy baza danych zawiera dwa adresy URL: jeden do obrazu w pełnym rozmiarze i jeden do miniatury.

Jest to obraz tabeli Ad

Gdy użytkownik przesyła obraz, fronton uruchomiony w roli Sieć Web zapisuje obraz w obiekcie blob na platformie Azure, a informacje o reklamie — w bazie danych z adresem URL wskazującym na obiekt blob. W tym samym czasie w kolejce platformy Azure jest zapisywany komunikat. Proces zaplecza uruchomiony w roli Proces roboczy okresowo sonduje kolejkę w celu wyszukania nowych komunikatów. Po wyświetleniu nowego komunikatu rola Proces roboczy tworzy miniaturę obrazu i aktualizuje pole adresu URL miniatury dla danej reklamy. Na diagramie poniżej pokazano, jak współpracują ze sobą różne części aplikacji.

Diagram przedstawiający sposób interakcji części aplikacji.

Konfigurowanie środowiska projektowego

Aby rozpocząć, skonfiguruj środowisko projektowe za pomocą programu Visual Studio i zestawu Azure SDK.

  • Program Visual Studio 2019 zawiera zestaw Azure SDK. Jeśli używasz programu Visual Studio 2019, dla środowiska deweloperskiego nie jest wymagana żadna dodatkowa konfiguracja.

  • W przypadku programu Visual Studio 2015 kliknij następujący link, aby zainstalować zestaw Azure SDK dla programu Visual Studio 2015.

  • W przypadku programu Visual Studio 2013 kliknij następujący link, aby zainstalować zestaw Azure SDK dla programu Visual Studio 2013.

  • Jeśli nie masz zainstalowanego programu Visual Studio, użyj poniższej instrukcji, aby zainstalować program Visual Studio 2019 z zestawem Azure SDK.

Uwaga

Zależnie od liczby składników zależnych zestawu SDK, które znajdują się już na komputerze, instalowanie zestawu SDK może trwać od kilku minut do pół godziny lub dłużej.

Pobieranie i uruchamianie gotowego rozwiązania

  1. Pobierz i rozpakuj ukończone rozwiązanie.

  2. Uruchom program Visual Studio.

  3. Z menu Plik wybierz polecenie Otwórz projekt, przejdź do lokalizacji pobranego rozwiązania, a następnie otwórz plik rozwiązania.

  4. Aby skompilować rozwiązanie, naciśnij CTRL+SHIFT+B.

    Domyślnie program Visual Studio automatycznie przywraca zawartość pakietu NuGet, która nie została uwzględniona w pliku .zip . Jeśli pakiety nie zostaną przywrócone, zainstaluj je ręcznie, przechodząc do okna dialogowego Zarządzanie pakietami NuGet dla rozwiązania i klikając przycisk Przywróć w prawym górnym rogu ekranu.

  5. Sprawdź w Eksploratorze rozwiązań, czy projekt ContosoAdsCloudService został wybrany jako projekt startowy.

  6. Jeśli używasz programu Visual Studio 2015 lub nowszego, zmień parametry połączenia programu SQL Server w pliku Web.config projektu ContosoAdsWeb i w pliku ServiceConfiguration.Local.cscfg projektu ContosoAdsCloudService. W każdym przypadku zmień ciąg „(localdb)\v11.0” na „(localdb)\MSSQLLocalDB”.

  7. Aby uruchomić aplikację, naciśnij CTRL+F5.

    Po uruchomieniu projektu usługi w chmurze w środowisku lokalnym program Visual Studio automatycznie wywołuje emulator obliczeń platformy Azure i emulator magazynu platformy Azure. Emulator obliczeń używa zasobów komputera do symulowania środowisk roli Sieć Web i roli Proces roboczy. Emulator magazynu używa bazy danych SQL Server Express LocalDB, aby symulować działanie magazynu w chmurze Azure.

    Podczas pierwszego uruchomienia projektu usługi w chmurze uruchomienie emulatorów może potrwać około minuty. Po zakończeniu uruchamiania emulatora w domyślnej przeglądarce otworzy się strona główna aplikacji.

    Architektura usługi Contoso Ads 1

  8. Wybierz pozycję Utwórz reklamę.

  9. Wprowadź dane testowe i wybierz obraz .jpg do przekazania, a następnie wybierz pozycję Utwórz.

    Obraz przedstawiający stronę Tworzenie

    Aplikacja przechodzi do strony Indeks, ale nie wyświetla miniatury nowej reklamy, ponieważ przetwarzanie nie zostało jeszcze wykonane.

  10. Zaczekaj chwilę, a następnie odśwież stronę indeksu, aby zobaczyć miniaturę.

    Strona indeksu

  11. Wybierz pozycję Szczegóły reklamy, aby wyświetlić obraz pełnowymiarowy.

    Strona szczegółów

Aplikacja działała całkowicie na komputerze lokalnym — bez połączenia z chmurą. Emulator magazynu przechowuje dane kolejek i obiektów blob w bazie danych SQL Server Express LocalDB, a aplikacja przechowuje dane reklam w innej bazie danych LocalDB. Platforma Entity Framework Code First automatycznie utworzyła bazę danych reklam, gdy aplikacja internetowa po raz pierwszy próbowała uzyskać do niej dostęp.

W poniższej sekcji skonfigurujesz rozwiązanie tak, aby używało zasobów w chmurze platformy Azure dla kolejek, obiektów blob i bazy danych aplikacji, gdy działa w chmurze. Możesz to zrobić, jeśli chcesz kontynuować uruchamianie lokalnie, ale korzystać z zasobów magazynu i bazy danych w chmurze. Jest to tylko kwestia ustawienia parametry połączenia, które można zobaczyć, jak to zrobić.

Wdrożenie aplikacji na platformie Azure

Wykonaj następujące kroki, aby uruchomić aplikację w chmurze:

  • Utworzenie usługi w chmurze platformy Azure.
  • Tworzenie bazy danych w usłudze Azure SQL Database.
  • Utwórz konto usługi Azure Storage.
  • Skonfiguruj rozwiązanie tak, aby używało bazy danych podczas jej uruchamiania na platformie Azure.
  • Skonfigurowanie rozwiązania do używania konta magazynu Azure po uruchomieniu na platformie Azure.
  • Wdrożenie projektu do usługi w chmurze platformy Azure.

Tworzenie usługi w chmurze platformy Azure

Usługa w chmurze platformy Azure to środowisko, w których działa aplikacja.

  1. W przeglądarce otwórz witrynę Azure Portal.

  2. Wybierz pozycję Utwórz zasób > Compute > Cloud Service.

  3. W polu wejściowym nazwy dns (Domain Name System) wprowadź prefiks adresu URL dla usługi w chmurze.

    Adres URL musi być unikatowy. Jeśli wybrany prefiks jest już używany, zostanie wyświetlony komunikat o błędzie.

  4. Określ nową grupę zasobów dla usługi. Wybierz pozycję Utwórz nową , a następnie wpisz nazwę w polu wprowadzania grupy zasobów, na przykład CS_contososadsRG.

  5. Wybierz region, w którym chcesz wdrożyć aplikację.

    To pole określa centrum danych, w którym jest hostowana usługa w chmurze. W przypadku aplikacji produkcyjnej warto wybrać region znajdujący się najbliżej klientów. Na potrzeby tego samouczka wybierz region znajdujący się najbliżej Ciebie.

  6. Wybierz pozycję Utwórz.

    Na poniższej ilustracji usługa w chmurze jest tworzona przy użyciu adresu URL CSvccontosoads.cloudapp.net.

    Obraz przedstawiający nową usługę w chmurze

Tworzenie bazy danych w usłudze Azure SQL Database

Gdy aplikacja działa w chmurze, używa ona bazy danych opartej na chmurze.

  1. W witrynie Azure Portal wybierz pozycję Utwórz zasób > Baza danych > SQL Database.

  2. W polu Nazwa bazy danych wprowadź wartość contosoads.

  3. W grupie Zasobów wybierz pozycję Użyj istniejącej i wybierz grupę zasobów używaną dla usługi w chmurze.

  4. Na poniższej ilustracji wybierz pozycję Serwer — Skonfiguruj wymagane ustawienia i Utwórz nowy serwer.

    Tunelowanie do serwera bazy danych

    Alternatywnie — jeśli subskrypcja obejmuje już serwer — możesz wybrać ten serwer z listy rozwijanej.

  5. W polu Nazwa serwera wpisz ciąg csvccontosodbserver.

  6. Wprowadź wartość Nazwa logowania i Hasło dla administratora.

    W przypadku wybrania opcji Utwórz nowy serwer nie wprowadzasz w tym miejscu istniejącej nazwy i hasła. Podajesz nową nazwę i hasło, które definiujesz teraz do użycia w przyszłości podczas uzyskiwania dostępu do bazy danych. W przypadku wybrania utworzonego wcześniej serwera w portalu zostanie wyświetlony monit o podanie hasła do utworzonego wcześniej konta użytkownika administracyjnego.

  7. Wybierz taką samą lokalizację jak w usłudze w chmurze.

    Gdy usługa w chmurze i baza danych znajdują się w różnych centrach danych (w różnych regionach), opóźnienie wzrasta i naliczane są opłaty za przepustowość poza centrum danych. Przepustowość w centrum danych jest bezpłatna.

  8. Zaznacz opcję Zezwalaj usługom platformy Azure na dostęp do serwera.

  9. Wybierz pozycję Wybierz dla nowego serwera.

    Nowy serwer

  10. Wybierz pozycję Utwórz.

Tworzenie konta usługi Azure Storage

Konto magazynu platformy Azure udostępnia zasoby służące do przechowywania danych kolejek i obiektów blob w chmurze.

W rzeczywistych aplikacjach przeważnie tworzy się oddzielne konta dla danych aplikacji porównywanych z danymi rejestrowania oraz oddzielne konta dla danych testowych porównywanych z danymi produkcyjnymi. W tym samouczku użyjesz tylko jednego konta.

  1. W witrynie Azure Portal wybierz pozycję Utwórz konto magazynu zasobów > > — obiekt blob, plik, tabela, kolejka.

  2. W polu Nazwa wpisz prefiks adresu URL.

    Ten prefiks plus tekst widoczny w polu jest unikatowym adresem URL konta magazynu. Jeśli wprowadzony prefiks jest już używany przez inną osobę, wybierz inny prefiks.

  3. W obszarze Model wdrażania wybierz opcję Klasyczny.

  4. Z listy rozwijanej Replikacja wybierz wartość Magazyn lokalnie nadmiarowy.

    Jeśli na koncie magazynu włączono replikację geograficzną, przechowywana zawartość jest replikowana do pomocniczego centrum danych. Pozwala to na przejście do trybu failover w przypadku wystąpienia poważnej awarii w lokalizacji głównej. Replikacja geograficzna może pociągnąć za sobą dodatkowe koszty. W przypadku kont testowych i projektowych przeważnie nie chcesz płacić za replikację geograficzną. Aby uzyskać więcej informacji, zobacz temat dotyczący tworzenia i usuwania konta magazynu oraz zarządzania nim.

  5. W grupie Zasobów wybierz pozycję Użyj istniejącej i wybierz grupę zasobów używaną dla usługi w chmurze.

  6. Z listy rozwijanej Lokalizacja wybierz region wybrany wcześniej dla usługi w chmurze.

    Gdy usługa w chmurze i konto magazynu znajdują się w różnych centrach danych (w różnych regionach), opóźnienia rosną i są naliczane opłaty za przepustowość poza centrum danych. Przepustowość w centrum danych jest bezpłatna.

    Grupy koligacji Azure udostępniają mechanizm umożliwiający minimalizowanie odległości między zasobami w centrum danych, a przez to redukowanie opóźnienia. W tym samouczku nie są używane grupy koligacji. Aby uzyskać więcej informacji, zobacz temat Jak utworzyć grupę koligacji w Azure.

  7. Wybierz pozycję Utwórz.

    Nowe konto usługi Storage

    Na ilustracji przedstawiono utworzone konto magazynu z adresem URL csvccontosoads.core.windows.net.

Konfigurowanie rozwiązania do używania bazy danych w usłudze Azure SQL Database podczas jej uruchamiania na platformie Azure

Projekt internetowy i projekt roli procesu roboczego każdy ma własną bazę danych parametry połączenia, a każda z nich musi wskazywać bazę danych w usłudze Azure SQL Database, gdy aplikacja działa na platformie Azure.

Używasz przekształcenia Web.config dla roli sieci Web i ustawienia środowiska usługi w chmurze dla roli procesu roboczego.

Uwaga

W tej i kolejnej sekcji poświadczenia są przechowywane w plikach projektu. Nie należy przechowywać poufnych danych w publicznych repozytoriach kodów źródłowych.

  1. W projekcie ContosoAdsWeb otwórz plik przekształcenia Web.Release.config dla pliku Web.config aplikacji, usuń blok komentarza zawierający element <connectionStrings> i wklej poniższy kod w jego miejscu.

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

    Zostaw plik otwarty do edycji.

  2. W witrynie Azure Portal wybierz pozycję Bazy danych SQL w okienku po lewej stronie, wybierz bazę danych utworzoną na potrzeby tego samouczka, a następnie wybierz pozycję Pokaż parametry połączenia.

    Pokazywanie parametrów połączeń

    Portal zawiera parametry połączeń oraz symbol zastępczy w miejscu hasła.

    Parametry połączeń

  3. W pliku przekształcenia Web.Release.config usuń element {connectionstring}, a w jego miejscu wklej parametry połączenia ADO.NET z witryny Azure Portal.

  4. W parametrach połączenia wklejonych w pliku przekształcenia Web.Release.config zastąp element {your_password_here} hasłem utworzonym dla nowej bazy danych SQL.

  5. Zapisz plik.

  6. Wybierz i skopiuj parametry połączenia (bez otaczających je znaków cudzysłowu) do użycia w kolejnych krokach konfigurowania projektu roli Proces roboczy.

  7. W Eksplorator rozwiązań w obszarze Role w projekcie usługi w chmurze kliknij prawym przyciskiem myszy pozycję ContosoAdsWorker, a następnie wybierz pozycję Właściwości.

    Zrzut ekranu przedstawiający opcję menu Właściwości.

  8. Wybierz kartę Ustawienia .

  9. Zmień ustawienie Konfiguracja usługi na wartość Chmura.

  10. Wybierz pole Wartość dla ustawienia ContosoAdsDbConnectionString, a następnie wklej parametry połączenia skopiowane z poprzedniej sekcji samouczka.

    Parametry połączenia bazy danych dla roli Proces roboczy

  11. Zapisz zmiany.

Konfigurowanie rozwiązania do używania konta magazynu Azure po uruchomieniu na platformie Azure

Parametry połączenia konta magazynu platformy Azure dla projektu roli Sieć Web i projektu roli Proces roboczy są przechowywane w ustawieniach środowiska w projekcie usługi w chmurze. Dla każdego projektu istnieje oddzielny zestaw ustawień, które mają być używane, gdy aplikacja działa lokalnie i kiedy działa w chmurze. Ustawienia środowiska chmury są aktualizowane zarówno dla projektów ról sieci Web, jak i procesu roboczego.

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję ContosoAdsWeb w obszarze Role w projekcie ContosoAdsCloudService, a następnie wybierz pozycję Właściwości.

    Obraz przedstawiający właściwości roli

  2. Wybierz kartę Ustawienia . W polu rozwijanym Konfiguracja usługi wybierz pozycję Chmura.

    Konfiguracja chmury

  3. Wybierz wpis StorageConnectionString i zobaczysz przycisk wielokropka (...) po prawej stronie wiersza. Wybierz przycisk wielokropka, aby otworzyć okno dialogowe Tworzenie parametrów połączenia magazynu.

    Otwieranie okna Tworzenie parametrów połączenia

  4. W oknie dialogowym Tworzenie parametrów połączenia magazynu wybierz pozycję Twoja subskrypcja, wybierz utworzone wcześniej konto magazynu, a następnie wybierz przycisk OK. Eksplorator wyświetli monit o podanie poświadczeń konta platformy Azure, jeśli nadal musisz się zalogować.

    Tworzenie parametrów połączenia usługi Storage

  5. Zapisz zmiany.

  6. Wykonaj kroki tej samej procedury, która była używana na potrzeby parametrów połączenia StorageConnectionString, aby ustawić parametry połączenia Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString.

    Te parametry są używane do rejestrowania.

  7. Wykonaj kroki tej samej procedury, która była używana na potrzeby roli ContosoAdsWeb, aby ustawić parametry połączeń dla roli ContosoAdsWorker. Pamiętaj o ustawieniu pozycji Konfiguracja usługi na wartość Chmura.

Ustawienia środowiska roli skonfigurowane przy użyciu interfejsu użytkownika programu Visual Studio są przechowywane w następujących plikach w projekcie ContosoAdsCloudService:

  • ServiceDefinition.csdef — definiuje nazwy ustawień.
  • ServiceConfiguration.Cloud.cscfg — udostępnia wartości w przypadku uruchamiania aplikacji w chmurze.
  • ServiceConfiguration.Local.cscfg — udostępnia wartości w przypadku uruchamiania aplikacji w środowisku lokalnym.

Na przykład plik ServiceDefinition.csdef zawiera poniższe definicje:

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

A plik ServiceConfiguration.Cloud.cscfg zawiera wartości wprowadzone dla tych ustawień w programie Visual Studio.

<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>

Ustawienie <Instances> określa liczbę maszyn wirtualnych, na których platforma Azure uruchamia kod roli procesu roboczego. W sekcji Następne kroki można znaleźć linki do dalszych informacji na temat skalowania usługi w chmurze w poziomie.

Wdrażanie projektu na platformie Azure

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt w chmurze ContosoAdsCloudService, a następnie wybierz polecenie Opublikuj.

    Menu Publikowanie

  2. W kroku Logowanie kreatora Publikowanie aplikacja systemu Azure wybierz pozycję Dalej.

    Krok Logowanie

  3. W kroku Ustawienia kreatora wybierz pozycję Dalej.

    Krok Ustawienia

    Domyślne ustawienia na karcie Zaawansowane są wystarczające w przypadku tego samouczka. Informacje o karcie Zaawansowane można znaleźć w temacie Kreator publikowania aplikacji platformy Azure.

  4. W kroku Podsumowanie wybierz pozycję Publikuj.

    Krok Podsumowanie

    W programie Visual Studio zostanie otwarte okno dziennika aktywności platformy Azure.

  5. Wybierz ikonę strzałki w prawo, aby rozwinąć szczegóły wdrożenia.

    Wdrożenie może potrwać 5 minut lub dłużej.

    Okno Dziennik aktywności platformy Azure

  6. Po zakończeniu wdrażania wybierz adres URL aplikacji internetowej, aby uruchomić aplikację.

  7. Teraz możesz przetestować aplikację, tworząc, wyświetlając i edytując niektóre reklamy, tak jak w przypadku lokalnego uruchomienia aplikacji.

Uwaga

Po zakończeniu testowania usuń lub zatrzymaj usługę w chmurze. Nawet jeśli nie używasz usługi w chmurze, opłaty są naliczane, ponieważ zarezerwowano dla niej zasoby maszyny wirtualnej. Jeśli usługa będzie działać, każda osoba, która znajdzie adres URL, będzie mogła tworzyć i wyświetlać reklamy. W witrynie Azure Portal przejdź do karty Przegląd dla usługi w chmurze, a następnie kliknij przycisk Usuń u góry strony. Jeśli chcesz tylko czasowo uniemożliwić innym użytkownikom dostęp do witryny, kliknij przycisk Zatrzymaj. W takim przypadku opłaty będą nadal naliczane. Podobne kroki można wykonać w celu usunięcia konta magazynu i bazy danych SQL, jeśli nie są już potrzebne.

Tworzenie aplikacji od początku

Jeśli nadal musisz pobrać ukończoną aplikację, zrób to teraz. Skopiuj pliki z pobranego projektu do nowego projektu.

Tworzenie aplikacji Contoso Ads obejmuje następujące czynności:

  • Tworzenie rozwiązania usługi w chmurze w programie Visual Studio.
  • Aktualizowanie i dodawanie pakietów NuGet.
  • Ustawianie odwołań do projektu.
  • Konfigurowanie parametrów połączenia.
  • Dodawanie plików kodu.

Po utworzeniu rozwiązania można przejrzeć kod unikatowy dla projektów usług w chmurze oraz kolejki i obiekty blob platformy Azure.

Tworzenie rozwiązania usługi w chmurze w programie Visual Studio

  1. W programie Visual Studio wybierz pozycję Nowy projekt z menu Plik.

  2. W lewym okienku okna dialogowego Nowy projekt rozwiń węzeł Visual C# i wybierz szablony Chmura, a następnie wybierz szablon Usługi w chmurze Azure.

  3. Nadaj projektowi nazwę i rozwiązaniu ContosoAdsCloudService, a następnie wybierz przycisk OK.

    Nowy projekt

  4. W oknie dialogowym Nowa usługa w chmurze Azure dodaj rolę sieci Web i rolę procesu roboczego. Nazwij rolę Sieć Web ContosoAdsWeb i rolę Proces roboczy ContosoAdsWorker. (Aby zmienić domyślne nazwy ról, użyj ikony ołówka w okienku po prawej stronie).

    Projekt nowej usługi w chmurze

  5. Po wyświetleniu okna dialogowego Nowy projekt ASP.NET dla roli sieci Web wybierz szablon MVC, a następnie wybierz pozycję Zmień uwierzytelnianie.

    Zmienianie uwierzytelniania

  6. W oknie dialogowym Zmienianie uwierzytelniania wybierz pozycję Brak uwierzytelniania, a następnie wybierz przycisk OK.

    Bez uwierzytelniania

  7. W oknie dialogowym Nowy projekt ASP.NET wybierz przycisk OK.

  8. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy rozwiązanie (nie jeden z projektów) i wybierz pozycje Dodaj — Nowy projekt.

  9. W oknie dialogowym Dodawanie nowego projektu wybierz pozycję Windows w obszarze Visual C# w okienku po lewej stronie, a następnie wybierz szablon Biblioteka klas.

  10. Nadaj projektowi nazwę ContosoAdsCommon, a następnie wybierz przycisk OK.

    Z projektów ról Sieć Web i Proces roboczy należy odwoływać się do kontekstu platformy Entity Framework oraz modelu danych. Alternatywnie można zdefiniować klasy związane z platformą EF w projekcie roli Sieć Web i odwoływać się do tego projektu z projektu roli Proces roboczy. Jednak w przypadku zastosowania podejścia alternatywnego projekt roli Proces roboczy odwoływałby się do zestawów internetowych, których nie potrzebuje.

Aktualizowanie i dodawanie pakietów NuGet

  1. Otwórz okno dialogowe Zarządzanie pakietami NuGet dla rozwiązania.

  2. W górnej części okna wybierz pozycję Aktualizacje.

  3. Wyszukaj pakiet WindowsAzure.Storage, a jeśli znajduje się na liście, wybierz go i wybierz projekty sieci Web i procesu roboczego, aby je zaktualizować, a następnie wybierz pozycję Aktualizuj.

    Biblioteka klienta magazynu jest aktualizowana częściej niż szablony projektów programu Visual Studio, dlatego może się okazać, że wersja w nowo utworzonym projekcie musi zostać zaktualizowana.

  4. W górnej części okna wybierz pozycję Przeglądaj.

  5. Znajdź pakiet NuGet EntityFramework, a następnie zainstaluj go we wszystkich trzech projektach.

  6. Znajdź pakiet NuGet Microsoft.WindowsAzure.ConfigurationManager, a następnie zainstaluj go w projekcie roli Proces roboczy.

Ustawianie odwołań do projektu

  1. W projekcie ContosoAdsWeb ustaw odwołanie do projektu ContosoAdsCommon. Kliknij prawym przyciskiem myszy projekt ContosoAdsWeb, a następnie wybierz pozycję Odwołania - Dodaj odwołania. W oknie dialogowym Menedżer odwołań wybierz pozycję Rozwiązanie — projekty w okienku po lewej stronie, wybierz pozycję ContosoAdsCommon, a następnie wybierz przycisk OK.

  2. W projekcie ContosoAdsWorker ustaw odwołanie do projektu ContosoAdsCommon.

    ContosoAdsCommon zawiera model danych i klasę kontekstu platformy Entity Framework, która używa zarówno frontonu, jak i zaplecza.

  3. W projekcie ContosoAdsWorker ustaw odwołanie do elementu System.Drawing.

    Ten zestaw jest używany przez zaplecze na potrzeby konwertowania obrazów na miniatury.

Konfigurowanie parametrów połączenia

W tej sekcji będziesz konfigurować parametry połączenia usługi Azure Storage i danych SQL na potrzeby testowania lokalnego. Podane wcześniej w samouczku instrukcje dotyczące wdrażania wyjaśniają, w jaki sposób należy skonfigurować parametry połączenia aplikacji uruchomionej w chmurze.

  1. W projekcie ContosoAdsWeb otwórz plik Web.config aplikacji i wstaw następujący element connectionStrings po elemencie configSections.

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

    Jeśli korzystasz z programu Visual Studio 2015 lub nowszego, zastąp element „v11.0” elementem „MSSQLLocalDB”.

  2. Zapisz zmiany.

  3. W projekcie ContosoAdsCloudService kliknij prawym przyciskiem myszy pozycję ContosoAdsWeb w obszarze Role, a następnie wybierz pozycję Właściwości.

    Obraz właściwości roli

  4. W oknie właściwości ContosoAdsWeb [rola] wybierz kartę Ustawienia, a następnie wybierz pozycję Dodaj ustawienie.

    Pozostaw pozycję Konfiguracja usługi ustawioną na wartość Wszystkie konfiguracje.

  5. Dodaj ustawienie o nazwie StorageConnectionString. Ustaw pozycję Typ na ConnectionString, a pozycję Wartość na UseDevelopmentStorage = true.

    Nowe parametry połączenia

  6. Zapisz zmiany.

  7. Postępuj zgodnie z tą samą procedurą, aby dodać parametry połączenia magazynu przy użyciu właściwości roli ContosoAdsWorker.

  8. W oknie właściwości ContosoAdsWorker [Rola] dodaj kolejny parametry połączenia:

    • Nazwa: ContosoAdsDbConnectionString

    • Typ: ciąg

    • Wartość: wklej parametry połączenia zastosowane już do projektu roli Sieć Web. (Poniższy przykład dotyczy programu Visual Studio 2013. Nie zapomnij zmienić źródła danych, jeśli skopiujesz ten przykład i używasz programu Visual Studio 2015 lub nowszego).

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

Dodawanie plików kodu

W tej sekcji skopiujesz pliki kodu z pobranego rozwiązania do nowego rozwiązania. W poniższych sekcjach pokazano i wyjaśniono kluczowe części tego kodu.

Aby dodać pliki do projektu lub folderu, kliknij prawym przyciskiem myszy projekt lub folder i wybierz polecenie Dodaj - istniejący element. Wybierz żądane pliki, a następnie wybierz pozycję Dodaj. Jeśli zostanie wyświetlony monit o zastąpienie istniejących plików, wybierz pozycję Tak.

  1. W projekcie ContosoAdsCommon usuń plik Class1.cs i dodaj w jego miejsce pliki Ad.cs i ContosoAdscontext.cs z pobranego projektu.

  2. W projekcie ContosoAdsWeb dodaj poniższe pliki z pobranego projektu.

    • Global.asax.cs.
    • W folderze Views\Shared : _Layout.cshtml.
    • W folderze Views\Home: Index.cshtml.
    • W folderze Controllers: AdController.cs.
    • W folderze Views\Ad (najpierw utwórz ten folder): pięć plików .cshtml.
  3. W projekcie ContosoAdsWorker dodaj plik WorkerRole.cs z pobranego projektu.

Teraz możesz skompilować i uruchomić aplikację zgodnie z instrukcjami z samouczka, a aplikacja korzysta z lokalnych zasobów bazy danych i emulatora magazynu.

W poniższych sekcjach opisano kod powiązany z pracą z kolejkami, obiektami blob i środowiskiem platformy Azure. W tym samouczku nie wyjaśniono, jak tworzyć kontrolery i widoki MVC przy użyciu szkieletów, jak pisać kod programu Entity Framework, który współpracuje z bazami danych programu SQL Server, ani podstawami programowania asynchronicznego w programie ASP.NET 4.5. Aby uzyskać informacje dotyczące tych tematów, zobacz następujące zasoby:

ContosoAdsCommon — Ad.cs

Plik Ad.cs definiuje wyliczenia związane z kategoriami reklam i klasą jednostki POCO dla informacji o reklamach.

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

Klasa ContosoAdsContext określa, że klasa Ad jest używana w kolekcji DbSet, która program Entity Framework przechowuje w bazie danych SQL.

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

Klasa ma dwa konstruktory. Pierwszy z nich jest używany w projekcie sieci Web i określa nazwę parametrów połączenia, które są przechowywane w pliku Web.config. Drugi konstruktor umożliwia przekazywanie rzeczywistych parametrów połączenia używanych przez projekt roli Proces roboczy, ponieważ nie ma on pliku Web.config. Pokazano wcześniej, gdzie ta parametry połączenia była przechowywana. Później zobaczysz, jak kod pobiera parametry połączenia podczas tworzenia wystąpienia klasy DbContext.

ContosoAdsWeb — Global.asax.cs

Kod wywoływany z metody Application_Start umożliwia tworzenie kontenera obiektów blob obrazów i kolejki obrazów, jeśli jeszcze nie istnieją. Ten kod gwarantuje, że za każdym razem, gdy używasz nowego konta magazynu lub emulatora magazynu na nowym komputerze, kod automatycznie tworzy wymagany kontener obiektów blob i kolejkę.

Kod uzyskuje dostęp do konta magazynu przy użyciu parametrów połączenia magazynu z pliku .cscfg.

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

Następnie pobiera odwołanie do kontenera obiektów blob obrazów, tworzy kontener (jeśli jeszcze nie istnieje) oraz ustawia uprawnienia dostępu w obrębie nowego kontenera. Domyślnie nowe kontenery zezwalają na dostęp do obiektów blob tylko klientom z poświadczeniami konta magazynu. Obiekty blob w witrynie sieci Web muszą być publiczne, aby możliwe było wyświetlanie obrazów przy użyciu adresów URL wskazujących na obiekty blob obrazów.

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

Podobny kod pobiera odwołanie do kolejki obrazów i tworzy nową kolejkę. W takim przypadku nie trzeba zmieniać uprawnień.

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

ContosoAdsWeb — _Layout.cshtml

Plik _Layout.cshtml umożliwia ustawienie nazwy aplikacji w nagłówku i stopce oraz utworzenie wpisu menu „Ads”.

ContosoAdsWeb — Views\Home\Index.cshtml

Plik Views\Home\Index.cshtml umożliwia wyświetlanie linków kategorii na stronie głównej. Linki przekazują wartość całkowitą typu wyliczeniowego Category w zmiennej querystring na stronie indeksu reklam.

<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

W pliku AdController.cs konstruktor wywołuje metodę InitializeStorage w celu utworzenia obiektów biblioteki klienta usługi Azure Storage, które będą dostarczać interfejs API do pracy z kolejkami i obiektami blob.

Następnie kod pobiera odwołanie do kontenera obiektów blob obrazów, jak było to widać wcześniej w pliku Global.asax.cs. W tym czasie ustawiane są domyślne zasady ponawiania odpowiednie dla aplikacji internetowej. Domyślne zasady ponawiania wycofywania wykładniczego mogą spowodować, że aplikacja internetowa przestanie odpowiadać dłużej niż minutę na powtórzone próby w przypadku błędu przejściowego. Zasady ponawiania określone w tym miejscu powodują oczekiwanie przez trzy sekundy po każdej próbie. Maksymalna liczba prób to trzy.

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

Podobny kod pobiera odwołanie do kolejki obrazów.

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

Większość kodu kontrolera jest typowa dla pracy z modelem danych platformy Entity Framework za pomocą klasy DbContext. Wyjątkiem jest metoda HttpPost Create, która powoduje przekazanie pliku i zapisanie go w magazynie obiektów blob. Integrator modelu udostępnia obiekt HttpPostedFileBase w metodzie.

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

Jeśli użytkownik wybrał plik do przekazania, kod powoduje przekazanie pliku, zapisanie go w obiekcie blob i zaktualizowanie rekordu bazy danych Ad przy użyciu adresu URL, który wskazuje obiekt blob.

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

Kod, który obsługuje przekazywanie, znajduje się w metodzie UploadAndSaveBlobAsync. Powoduje on utworzenie nazwy identyfikatora GUID dla obiektu blob, przekazanie i zapisanie pliku oraz zwraca odwołanie do zapisanego obiektu blob.

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;
}

Po przekazaniu obiektu blob i zaktualizowaniu bazy danych przy użyciu metody HttpPost Create następuje utworzenie kolejki komunikatów w celu poinformowania procesu zaplecza, że obraz jest gotowy do konwersji na miniaturę.

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

Kod metody HttpPost Edit jest podobny, z tą różnicą, że jeśli użytkownik wybierze nowy plik obrazu, należy usunąć wszystkie już istniejące obiekty blob.

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

W kolejnym przykładzie pokazano kod, który służy do usuwania obiektów blob podczas usuwania reklamy.

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 i Details.cshtml

Plik Index.cshtml służy do wyświetlania miniatury z innymi danymi reklamy.

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

Plik Details.cshtml służy do wyświetlania obrazu w pełnym rozmiarze.

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

ContosoAdsWeb — Views\Ad\Create.cshtml i Edit.cshtml

Pliki Create.cshtml i Edit.cshtml określają kodowanie formularzy, które umożliwia kontrolerowi pobieranie obiektu HttpPostedFileBase.

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

Element <input> informuje przeglądarkę o konieczności udostępnienia okna dialogowego wyboru pliku.

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

ContosoAdsWorker — WorkerRole.cs — metoda OnStart

Środowisko roli procesu roboczego platformy Azure wywołuje metodę OnStart w klasie WorkerRole podczas uruchamiania roli Proces roboczy. Metoda Run jest wywoływana po zakończeniu działania metody OnStart.

Metoda OnStart pobiera parametry połączenia bazy danych z pliku .cscfg i przekazuje je do klasy Entity Framework DbContext. Dostawca SQLClient jest używany domyślnie, więc dostawca nie musi być określony.

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

Następnie metoda pobiera odwołanie do konta magazynu i tworzy kolejkę oraz kontener obiektów blob i kolejki, jeśli nie istnieją. Kod tej czynności działa podobnie do metody Application_Start roli Sieć Web.

ContosoAdsWorker — WorkerRole.cs — metoda Run

Metoda Run jest wywoływana, gdy zakończy się inicjowanie przy użyciu metody OnStart. Metoda wykonuje nieskończoną pętlę, która oczekuje na nowe komunikaty w kolejce i przetwarza je po nadejściu.

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);
        }
    }
}

Po każdej iteracji pętli, jeśli żaden komunikat nie zostanie znaleziony w kolejce, program zostanie uśpiony na sekundę. Ten tryb uśpienia uniemożliwia roli procesu roboczego naliczenie nadmiernego czasu procesora CPU i kosztów transakcji magazynu. Zespół doradczy klienta firmy Microsoft opowiada o deweloperze, który zapomniał uwzględnić tę funkcję uśpienia, wdrożony w środowisku produkcyjnym i pozostawiony na wakacje. Kiedy wrócili, ich nadzór kosztował więcej niż wakacje.

Czasami zawartość komunikatu w kolejce może powodować wystąpienie błędu podczas przetwarzania. Ten rodzaj wiadomości jest nazywany komunikatem trucizny. Jeśli tylko zarejestrowano błąd i ponownie uruchomiono pętlę, możesz bez końca spróbować przetworzyć ten komunikat. W związku z tym blok catch zawiera instrukcję if, która sprawdza, ile razy aplikacja próbowała przetworzyć bieżący komunikat. Jeśli liczba jest większa niż pięć razy, komunikat zostanie usunięty z kolejki.

ProcessQueueMessage — ten element jest wywoływany po znalezieniu komunikatu w kolejce.

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);
}

Ten kod odczytuje bazę danych, aby uzyskać adres URL obrazu, konwertuje obraz na miniaturę, zapisuje miniaturę w obiekcie blob, aktualizuje bazę danych przy użyciu adresu URL obiektu blob miniatury i usuwa komunikat z kolejki.

Uwaga

Kod w metodzie ConvertImageToThumbnailJPG używa klas w przestrzeni nazw System.Drawing w celu uproszczenia działania. Jednak klasy w tej przestrzeni nazw zostały zaprojektowane do użytku z aplikacją Windows Forms. Nie są one obsługiwane w usłudze systemu Windows lub programu ASP.NET. Aby uzyskać więcej informacji o opcjach przetwarzania obrazu, zobacz Dynamiczne generowanie obrazu i Bezpośrednie zmienianie rozmiaru obrazu.

Rozwiązywanie problemów

Jeśli coś nie działa podczas wykonywania instrukcji podanych w tym samouczku, zapoznaj się z poniższym opisem niektórych typowych błędów i sposobów ich rozwiązywania.

ServiceRuntime.RoleEnvironmentException

Obiekt RoleEnvironment jest udostępniany przez platformę Azure podczas uruchamiania aplikacji na platformie Azure lub uruchamiania lokalnego przy użyciu emulatora usługi Azure Compute. Jeśli ten błąd występuje podczas uruchamiania lokalnie, upewnij się, że jako projekt startowy ustawiono projekt ContosoAdsCloudService. To ustawienie sprawia, że projekt jest uruchamiany przy użyciu emulatora usługi Azure Compute.

Jednym z celów użycia w aplikacji obiektu Azure RoleEnvironment jest uzyskanie wartości parametrów połączenia, które są przechowywane w pliku .cscfg. Ze względu na to inną przyczyną tego wyjątku jest brak parametrów połączenia. Upewnij się, że ustawienie StorageConnectionString zostało utworzone dla konfiguracji w chmurze i lokalnej w projekcie ContosoAdsWeb oraz że dla obydwu konfiguracji utworzono parametry połączenia w projekcie ContosoAdsWorker. Jeśli w całym rozwiązaniu zostanie wyszukane wyszukiwanie Znajdź wszystko StorageConnectionString, powinno zostać wyświetlone dziewięć razy w sześciu plikach.

Nie można przesłonić portu xxx. Nowy port poniżej minimalnej dozwolonej wartości 8080 dla protokołu HTTP

Spróbuj zmienić numer portu używanego przez projekt sieci Web. Kliknij prawym przyciskiem myszy projekt ContosoAdsWeb, a następnie wybierz pozycję Właściwości. Wybierz kartę Sieć Web , a następnie zmień numer portu w ustawieniu Adres URL projektu.

Kolejny alternatywny sposób rozwiązania tego problemu opisano w poniższej sekcji.

Inne błędy po uruchomieniu w środowisku lokalnym

Domyślnie nowe projekty usług w chmurze używają emulatora obliczeniowego platformy Azure express do symulowania środowiska platformy Azure. Emulator usługi Azure Compute to uproszczona wersja pełnego emulatora obliczeniowego, a w niektórych warunkach pełny emulator działa, gdy wersja ekspresowa nie jest obsługiwana.

Aby zmienić projekt w celu korzystania z pełnego emulatora, kliknij prawym przyciskiem myszy projekt ContosoAdsCloudService, a następnie wybierz pozycję Właściwości. W oknie Właściwości wybierz kartę Sieć Web, a następnie wybierz przycisk radiowy Użyj pełnego emulatora.

Aby można było uruchomić aplikację w pełnym emulatorze, należy otworzyć program Visual Studio z uprawnieniami administratora.

Następne kroki

Aplikacja Contoso Ads jest celowo prosta na potrzeby samouczka wprowadzającego. Na przykład nie implementuje iniekcji zależności ani repozytorium i jednostki wzorców pracy. Nie używa interfejsu do rejestrowania, nie używa Migracje Code First EF do zarządzania zmianami modelu danych ani odpornością połączenia EF w celu zarządzania przejściowymi błędami sieci itd.

Aby uzyskać ogólne informacje o tworzeniu aplikacji w chmurze, zobacz Tworzenie aplikacji w chmurze na platformie Azure.

Aby uzyskać więcej informacji, zobacz następujące zasoby: