Перейти к содержимому

Microsoft apps services что это такое

  • автор:

Обзор Службы приложений Azure

Служба приложений Azure — это служба на базе HTTP для размещения веб-приложений, интерфейсов REST API и серверной части мобильных решений. Вы можете разрабатывать на любимом языке, будь то .NET, .NET Core, Java, Node.js, PHP и Python. Приложения без затруднений работают и масштабируются в средах на основе Windows и Linux.

Служба приложений добавляет возможности Microsoft Azure в приложение, например безопасность, балансировку нагрузки, автомасштабирование и автоматическое управление. Кроме того, вы можете воспользоваться своими возможностями DevOps, такими как непрерывное развертывание из Azure DevOps, GitHub, Docker Hub и других источников, управление пакетами, промежуточные среды, личный домен и SSL-сертификаты.

В службе приложений плата начисляется за используемые вычислительные ресурсы Azure. Используемые вычислительные ресурсы определяются планом службы приложений, в котором выполняются ваши приложения. Дополнительные сведения см. в статье Обзор планов службы приложений Azure.

Преимущества службы приложений

Служба приложений Azure — это полностью управляемое решение на основе модели «платформа как услуга» (PaaS) для разработчиков. Ниже представлены некоторые ключевые функции службы приложений.

  • Несколько языков и платформ— Служба приложений поддерживает ASP.NET, ASP.NET Core, Java, Node.js, PHP или Python. Кроме того, вы можете запускать PowerShell и другие скрипты или исполняемые файлы в качестве фоновых служб.
  • Управляемая рабочая среда — Служба приложений автоматически устанавливает исправления и обеспечивает обслуживание ОС и языковых платформ. Сфокусируйтесь на написании эффективных приложений и предоставьте Azure управление платформой.
  • Контейнеризация и Docker — преобразите для Docker свое приложение и разместите пользовательский контейнер Windows или Linux в Службе приложений. Запуск приложений с несколькими контейнерами с помощью Docker Compose. Используйте свои навыки работы с Docker непосредственно в Службе приложений.
  • Оптимизация DevOps — Настройка непрерывной интеграции и непрерывного развертывания с помощью Azure DevOps, GitHub, BitBucket, Docker Hub или Реестра контейнеров Azure. Повышайте уровень обновлений с помощью тестовых и промежуточных сред. Управляйте приложениями в службе приложений с помощью оболочки Azure PowerShell или кроссплатформенного интерфейса командной строки (CLI).
  • Высокодоступное глобальное масштабирование.Увеличивайте либо уменьшайте размер вручную или автоматически. Храните приложения в любом месте глобальной инфраструктуры центра обработки данных. При этом соглашение об уровне обслуживания гарантирует высокую доступность.
  • Подключение на платформы SaaS и локальные данные. Выберите из множества сотен соединителей для корпоративных систем (например, SAP), служб SaaS (таких как Salesforce) и интернет-служб (например, Facebook). Получайте доступ к локальным данным с помощью гибридных подключений и виртуальных сетей Azure.
  • Безопасность и соответствие требованиям. Служба приложений совместима со стандартами ISO, SOC и PCI. Создание ограничений IP-адресов и удостоверений управляемых служб. Запретить переключение поддомена.
  • Проверка подлинности — пользователей с помощью встроенного компонента проверки подлинности. Проверка подлинности пользователей с помощью идентификатора Microsoft Entra, Google, Facebook, Twitter или учетной записи Майкрософт.
  • Шаблоны приложений. Вы можете выбрать любой шаблон приложения из обширного списка в Azure Marketplace, например WordPress, Joomla и Drupal.
  • Интеграция с Visual Studio и Visual Studio Code. Выделенные инструменты в Visual Studio и Visual Studio Code упрощают создание, развертывание и отладку приложений.
  • Интеграция средств Java. Разработка и развертывание в Azure без выхода из избранных средств разработки, таких как Maven, Gradle, Visual Studio Code, IntelliJ и Eclipse.
  • Функции API и мобильных приложений. Служба приложений обеспечивает полную поддержку CORS для работы с RESTful API. Также она упрощает использование мобильных приложений, обеспечивая аутентификацию, автономную синхронизацию данных, отправку push-уведомлений и многое другое.
  • Независимый от сервера код. Выполняйте фрагменты кода или скрипта по требованию без необходимости явно подготавливать и администрировать инфраструктуру. Платите только за время выполнения кода (см. статью Документация по функциям Azure).

Помимо Службы приложений, Azure предлагает и другие службы, которые можно использовать для размещения веб-сайтов и веб-приложений. В большинстве случаев оптимальным вариантом является служба приложений. Для реализации архитектуры микрослужб рекомендуется использовать Приложения Azure Spring или Service Fabric. Если вам требуется дополнительный контроль над виртуальными машинами, на которых выполняется ваш код, рекомендуется использовать Виртуальные машины Azure. Дополнительные сведения о выборе между этими службами Azure см. в статье Сравнение службы приложений Azure, виртуальных машин, Service Fabric и облачных служб.

Служба приложений в Linux

Служба приложений также позволяет клиентам размещать веб-приложения из поддерживаемых стеков приложений изначально в Linux. Она также может запускать пользовательские контейнеры Linux (также известные как Веб-приложение для контейнеров).

Встроенная поддержка нескольких языков и платформ

Служба приложений в Linux поддерживает ряд встроенных образов, характерных для конкретного языка. Просто разверните код. Поддерживаемые языки: Node.js, Java (Tomcat, JBoss или с внедренным веб-сервером), PHP, Python и .NET Core. Выполните az webapp list-runtimes —os linux , чтобы просмотреть поддерживаемые языки и версии. Если среда выполнения, необходимая для приложения, не поддерживается во встроенных образах, ее можно развернуть с помощью пользовательского контейнера.

Устаревшие среды выполнения периодически удаляются из колонок создания и настройки веб-приложений на портале. Эти среды выполнения будут скрыты на портале, если обслуживающая организация прекратила их поддержку или обнаружила в них значительные уязвимости. Это сделано для того, чтобы клиенты могли использовать новые среды выполнения, которые помогут добиться большего успеха.

Если устаревшая среда выполнения скрыта на портале, любой из существующих сайтов, использующий эту версию, продолжит работать. Владельцы подписок Azure получат уведомление по электронной почте, прежде чем среда будет полностью удалена с платформы Службы приложений.

Если необходимо создать другое веб-приложение с устаревшей версией среды выполнения, которая больше не отображается на портале, изучите руководства по настройке для определенного языка, в которых показано, как получить версию среды выполнения сайта. Для создания сайта с такой же средой выполнения можно использовать Azure CLI. В качестве альтернативы вы можете экспортировать шаблон ARM сайта, используя кнопку Экспортировать шаблон в колонке веб-приложения на портале. Этот шаблон можно повторно использовать для создания нового сайта с такой же средой выполнения и конфигурацией.

Ограничения

  • Служба приложений в Linux не поддерживается для ценовой категории Общий.
  • На портале Azure отображаются только те функции, которые уже доступны для приложений Linux. Когда функции включены, они активируются на портале.
  • При развертывании на встроенных образах код и содержимое выделяются томом хранилища для веб-содержимого, которое поддерживается службой хранилища Microsoft Azure. Задержка диска в этом томе выше и более изменчива, чем задержка файловой системы контейнера. Приложения, для которых требуется частый доступ только для чтения к файлам содержимого, могут воспользоваться параметром настраиваемого контейнера, при котором файлы помещаются в файловую систему контейнера, а не в том содержимого.

Следующие шаги

Создайте первое веб-приложение.

Описание microsoft Office Web Apps Server Service Pack 1 (SP1)

Microsoft Office Web Apps Server Service Pack 1 (SP1) предоставляет последние обновления для Office Web Apps Server. Этот пакет услуг включает в себя два вида исправлений:

  • Ранее неизданные исправления, включенные в этот пакет услуг. В дополнение к общим исправлениям продукта, эти исправления включают в себя улучшение стабильности, производительности и безопасности.
  • Все ежемесячные обновления безопасности, которые были выпущены до января 2014 года, и все кумулятивные обновления, которые были выпущены до декабря 2013 года.

Решение

Как получить и установить пакет услуг

Следующий файл доступен для скачивания из Microsoft Download Center:

Download

  • Скачать пакет службы сервера Microsoft Office Web Apps Server Service Pack 1

Дополнительные сведения о скачивании файлов с сайта технической поддержки корпорации Майкрософт см. в приведенной ниже статье базы знаний Майкрософт:

119591 Как скачать файлы технической поддержки Майкрософт через веб-службы Корпорация Майкрософт сканировала этот файл на наличие вирусов. Корпорация Майкрософт использовала самое современное программное обеспечение для обнаружения вирусов, которое было доступно в день публикации файла. Файл хранится на серверах, усовершенствованных системами безопасности, которые помогают предотвратить несанкционированные изменения в файле. Для получения информации о том, как применить пакет услуг на сервере Office Web Apps 2013:

Применяйте обновления программного обеспечения к серверу Веб-приложений OfficeДля получения дополнительной информации о полном списке всех выпущенных пакетов серверов SP1, нажмите на следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:

2880556 Список всех пакетов службы 1 (SP1) для Microsoft SharePoint Server 2013 и связанных с ними серверных продуктов

Загружаемый список проблем, которые исправляет этот пакет услуг

Следующая книга доступна для скачивания. В этой трудовой книжке перечислены проблемы, исправленные этим пакетом услуг.

Download

  • Скачать пакет Microsoft Office и SharePoint 2013 Service Pack 1 Changes.xlsx

Заметка Эта трудовая книжка доступна только на английском языке.

Техническая информация

Для получения дополнительной информации об этом пакете услуг, нажмите следующий номер статьи, чтобы просмотреть статью в базе знаний Microsoft:

2817458 Технические сведения о сервисной упаковке 1 (SP1) для Microsoft SharePoint Server 2013 и связанных с ними серверных продуктов

Включение покупок в приложении приложений и надстроек

В этой статье показано, как использовать участников в пространстве имен Windows.Services.Store , чтобы запросить покупку текущего приложения или одной из его надстроек для пользователя. Например, если у пользователя в настоящее время есть пробная версия приложения, вы можете использовать этот процесс для приобретения полной лицензии для пользователя. Кроме того, вы можете использовать этот процесс для приобретения надстройки, например нового уровня игры для пользователя.

Чтобы запросить покупку приложения или надстройки, пространство имен Windows.Services.Store предоставляет несколько различных методов:

  • Если вы знаете идентификатор Магазина приложения или надстройки, можно использовать метод RequestPurchaseAsync класса StoreContext.
  • Если у вас уже есть объект StoreProduct, StoreSku или StoreAvailability, представляющий приложение или надстройку, можно использовать методы RequestPurchaseAsync этих объектов. Примеры различных способов получения StoreProduct в коде см. в статье «Получение сведений о продукте для приложений и надстроек».

Каждый метод представляет стандартный пользовательский интерфейс покупки пользователю, а затем выполняется асинхронно после завершения транзакции. Метод возвращает объект, указывающий, выполнена ли транзакция успешно.

Пространство имен Windows.Services.Store было введено в Windows 10 версии 1607, и его можно использовать только в проектах, предназначенных для Windows 10 Anniversary Edition (10.0; Сборка 14393) или более поздняя версия в Visual Studio. Если приложение предназначено для более ранней версии Windows 10, необходимо использовать пространство имен Windows.ApplicationModel.Store вместо пространства имен Windows.Services.Store . Дополнительные сведения см. в этой статье.

Необходимые компоненты

В этом примере имеются следующие предварительные требования:

  • Проект Visual Studio для приложения универсальная платформа Windows (UWP), предназначенного для Windows 10 Anniversary Edition (10.0; Сборка 14393) или более поздней версии.
  • Вы создали отправку приложений в Центре партнеров, и это приложение опубликовано в Магазине. При необходимости можно настроить приложение, чтобы оно не было обнаружено в Магазине во время его тестирования. Дополнительные сведения см. в руководстве по тестированию.
  • Если вы хотите включить покупки в приложении для надстройки для приложения, необходимо также создать надстройку в Центре партнеров.

В этом примере предполагается, что код:

  • Код выполняется в контексте страницы, содержащей ProgressRing с именем workingProgressRing и textBlock. textBlock Эти объекты используются для указания, что выполняется асинхронная операция и для отображения выходных сообщений соответственно.
  • Файл кода содержит инструкцию using для пространства имен Windows.Services.Store .
  • Приложение — это однопользовательское приложение, которое запускается только в контексте пользователя, запускающего приложение. Дополнительные сведения см. в разделе «Покупки в приложении» и пробные версии.

Если у вас есть классическое приложение, использующее мост для классических приложений, может потребоваться добавить дополнительный код, не показанный в этом примере, чтобы настроить объект StoreContext. Дополнительные сведения см. в разделе «Использование класса StoreContext» в классическом приложении, использующего мост для классических приложений.

Пример кода

В этом примере показано, как использовать метод RequestPurchaseAsync класса StoreContext для приобретения приложения или надстройки с известным идентификатором Магазина. Полный пример приложения см. в примере Магазина.

private StoreContext context = null; public async void PurchaseAddOn(string storeId) < if (context == null) < context = StoreContext.GetDefault(); // If your app is a desktop app that uses the Desktop Bridge, you // may need additional code to configure the StoreContext object. // For more info, see https://aka.ms/storecontext-for-desktop. >workingProgressRing.IsActive = true; StorePurchaseResult result = await context.RequestPurchaseAsync(storeId); workingProgressRing.IsActive = false; // Capture the error message for the operation, if any. string extendedError = string.Empty; if (result.ExtendedError != null) < extendedError = result.ExtendedError.Message; >switch (result.Status) < case StorePurchaseStatus.AlreadyPurchased: textBlock.Text = "The user has already purchased the product."; break; case StorePurchaseStatus.Succeeded: textBlock.Text = "The purchase was successful."; break; case StorePurchaseStatus.NotPurchased: textBlock.Text = "The purchase did not complete. " + "The user may have cancelled the purchase. ExtendedError: " + extendedError; break; case StorePurchaseStatus.NetworkError: textBlock.Text = "The purchase was unsuccessful due to a network error. " + "ExtendedError: " + extendedError; break; case StorePurchaseStatus.ServerError: textBlock.Text = "The purchase was unsuccessful due to a server error. " + "ExtendedError: " + extendedError; break; default: textBlock.Text = "The purchase was unsuccessful due to an unknown error. " + "ExtendedError: " + extendedError; break; >> 

См. также

  • Покупки из приложения и пробные версии
  • Получение сведений о продукте для приложений и надстроек
  • Получение сведений о лицензии для приложений и надстроек
  • Включение покупок потребляемых надстроек
  • Реализация пробной версии приложения
  • Пример хранилища

Создание и использование службы приложений

Списки кода в этом разделе относятся только к C#. Пример приложения службы приложений на C++/WinRT , а также C# см. в разделе Пример приложения службы приложений.

Службы приложений — это приложения UWP, которые могут предоставлять службы другим приложениям UWP. Это похоже на веб-службы на устройстве. Служба приложения выполняется как фоновой задачи в приложении узла и обеспечить его службы другим приложениям. Например служба приложения может предоставить службу сканер штрих-кода, которая может использовать другие приложения. Или корпоративный набор приложений может использовать общую службу проверки орфографии, которая доступна всем приложениям в наборе. Службы приложений позволяют создавать службы без пользовательского интерфейса, которые приложения могут вызывать на одном устройстве и, начиная с Windows 10 версии 1607, на удаленных устройствах.

Начиная с Windows 10 версии 1607 можно создавать службы приложения, работающие в том же процессе, что и приложение узла. В этой статье основное внимание уделяется созданию и использованию служб приложения, которые выполняются в отдельном фоновом процессе. Подробнее о службах приложения, работающих в том же процессе, что и ведущее приложение, см. в разделе Преобразование службы приложения для запуска в одном процессе с ее поставщиком.

Создание проекта поставщика службы приложений

В этой инструкции для простоты мы создадим универсальное решение.

  1. В Visual Studio 2015 или более поздней версии создайте проект приложения UWP и назовите его AppServiceProvider.
    1. Выберите Файл > Новый > проект.
    2. В диалоговом окне Создание проекта выберите Пустое приложение (универсальное приложение Для Windows) C#. Это приложение будет предоставлять службу приложения другим приложениям UWP.
    3. Нажмите кнопку Далее, а затем присвойте проекту имя AppServiceProvider, выберите для него расположение и нажмите кнопку Создать.

    Добавление расширения службы приложений в Package.appxmanifest

    В проекте AppServiceProvider откройте файл Package.appxmanifest в текстовом редакторе:

    1. Щелкните его правой кнопкой мыши в Обозреватель решений.
    2. Выберите Открыть с помощью.
    3. Выберите Редактор XML (текст).

    Добавьте в элемент следующее AppService расширение. В этом примере показано, как объявить службу com.microsoft.inventory и указать, что приложение является поставщиком службы приложений. Сама служба будет реализована в виде фоновой задачи. Проект приложения службы приложений предоставляет службу другим приложениям. Для имени службы мы рекомендуем использовать обратное доменное имя.

    Обратите внимание, что xmlns:uap4 префикс пространства имен и uap4:SupportsMultipleInstances атрибут действительны только в том случае, если вы используете Windows SDK версии 10.0.15063 или более поздней. Их можно удалить, если используется более ранняя версия SDK.

    Пример приложения службы приложений на C++/WinRT , а также C# см. в разделе Пример приложения службы приложений.

    Атрибут Category определяет это приложение как поставщик службы приложений.

    Атрибут EntryPoint идентифицирует класс с указанием пространства имен, который реализует службу, которую мы реализуем далее.

    Атрибут SupportsMultipleInstances указывает, что при каждом вызове службы приложений она должна выполняться в новом процессе. Это не обязательно, но доступно, если вам нужны эти функции и предназначены для пакета SDK 10.0.15063 (Windows 10 Creators Update) или более поздней версии. В качестве префикса следует использовать пространство имен uap4 .

    Создание службы приложений

    1. Служба приложений будет реализована в виде фоновой задачи. Это позволяет приложению переднего плана вызывать службу приложений в другом приложении. Чтобы создать службу приложений в качестве фоновой задачи, добавьте новый проект компонента среда выполнения Windows в решение (Файл > Добавить > новый проект) с именем MyAppService. В диалоговом окне Добавление нового проекта выберите Установленные > компоненты Visual C# > среда выполнения Windows (универсальные приложения Windows).
    2. В проекте AppServiceProvider добавьте ссылку между проектами в новый проект MyAppServiceОбозреватель решений щелкните правой кнопкой мыши проект >AppServiceProvider Add Reference Projects Solution (Добавить>эталонные>проекты>) и выберите MyAppService>OK. Этот шаг очень важен: если вы не добавите ссылку, служба приложения не сможет подключиться во время выполнения.
    3. В проекте MyAppService добавьте следующие операторы using в начало файла Class1.cs:
    using Windows.ApplicationModel.AppService; using Windows.ApplicationModel.Background; using Windows.Foundation.Collections; 
    public sealed class Inventory : IBackgroundTask < private BackgroundTaskDeferral backgroundTaskDeferral; private AppServiceConnection appServiceconnection; private String[] inventoryItems = new string[] < "Robot vacuum", "Chair" >; private double[] inventoryPrices = new double[] < 129.99, 88.99 >; public void Run(IBackgroundTaskInstance taskInstance) < // Get a deferral so that the service isn't terminated. this.backgroundTaskDeferral = taskInstance.GetDeferral(); // Associate a cancellation handler with the background task. taskInstance.Canceled += OnTaskCanceled; // Retrieve the app service connection and set up a listener for incoming app service requests. var details = taskInstance.TriggerDetails as AppServiceTriggerDetails; appServiceconnection = details.AppServiceConnection; appServiceconnection.RequestReceived += OnRequestReceived; >private async void OnRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args) < // This function is called when the app service receives a request. >private void OnTaskCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason) < if (this.backgroundTaskDeferral != null) < // Complete the service deferral. this.backgroundTaskDeferral.Complete(); >> > 
    • Если вызывающий объект находится на переднем плане, время существования службы приложения совпадает со временем существования вызывающей стороны.
    • Если вызывающий объект находится в фоновом режиме, служба приложений получает 30 секунд на выполнение. Активация задержки дает службе пять дополнительных секунд.

    OnTaskCanceled вызывается при отмене задачи. Задача отменяется, когда клиентское приложение удаляет AppServiceConnection, клиентское приложение приостанавливается, операционная система завершает работу или переходит в спящий режим, или ос иссякает ресурсы для выполнения задачи.

    Написание кода для службы приложений

    OnRequestReceived — это место, куда отправляется код для службы приложений. Замените заглушку OnRequestReceived в файле Inventory.csMyAppService кодом из этого примера. Этот код получает индекс складской позиции и передает его в строке команды в службу, чтобы получить название и цену указанной складской позиции. В собственные проекты добавьте код обработки ошибок.

    private async void OnRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args) < // Get a deferral because we use an awaitable API below to respond to the message // and we don't want this call to get canceled while we are waiting. var messageDeferral = args.GetDeferral(); ValueSet message = args.Request.Message; ValueSet returnData = new ValueSet(); string command = message["Command"] as string; int? inventoryIndex = message["ID"] as int?; if (inventoryIndex.HasValue && inventoryIndex.Value >= 0 && inventoryIndex.Value < inventoryItems.GetLength(0)) < switch (command) < case "Price": < returnData.Add("Result", inventoryPrices[inventoryIndex.Value]); returnData.Add("Status", "OK"); break; >case "Item": < returnData.Add("Result", inventoryItems[inventoryIndex.Value]); returnData.Add("Status", "OK"); break; >default: < returnData.Add("Status", "Fail: unknown command"); break; >> > else < returnData.Add("Status", "Fail: Index out of range"); >try < // Return the data to the caller. await args.Request.SendResponseAsync(returnData); >catch (Exception e) < // Your exception handling code here. >finally < // Complete the deferral so that the platform knows that we're done responding to the app service call. // Note for error handling: this must be called even if SendResponseAsync() throws an exception. messageDeferral.Complete(); >> 

    Обратите внимание, что OnRequestReceived является асинхронным , так как в этом примере мы вызываем метод SendResponseAsync .

    Выполняется отсрочка, чтобы служба пользовалась асинхронными методами в обработчике OnRequestReceived . Это гарантирует, что вызов OnRequestReceived не завершится до тех пор, пока не будет обработано сообщение. SendResponseAsync отправляет результаты вызывающей стороне. SendResponseAsync не сигнализирует о завершении вызова. Это завершение отсрочки, которое сообщает SendMessageAsync о завершении OnRequestReceived . Вызов SendResponseAsync заключен в блок try/finally, так как необходимо завершить отсрочку, даже если SendResponseAsync создает исключение.

    Службы приложений используют объекты ValueSet для обмена информацией. Размер данных, которые можно передать, ограничен только ресурсами системы. Не существует предопределенных параметров, которые можно использовать в ValueSet. Вам необходимо решить, какие значения параметров вы будете использовать для определения протокола для службы приложений. Вызывающий код необходимо писать с учетом этого протокола. В этом примере мы выбрали параметр с именем Command , значение которого указывает, что должна предоставить служба приложений: сведения об имени складской позиции или ее цене. Индекс имени складской позиции хранится в параметре ID . Возвращаемое значение хранится в параметре Result .

    Вызывающему коду возвращается перечисление AppServiceClosedStatus, указывающее на то, был ли вызов службы приложений успешным. Сбой вызова службы приложений может возникнуть, если ОС прерывает конечную точку службы, так как ее ресурсы исчерпаны. Вы можете возвращать дополнительные сведения об ошибке с помощью ValueSet. В этом примере мы используем параметр Status , чтобы возвращать в вызывающий код более подробные сведения об ошибке.

    Вызов SendResponseAsync возвращает ValueSet в вызывающий код.

    Развертывание приложения службы и получение имени семейства пакетов

    Поставщик службы приложений должен быть развернут, прежде чем вы сможете вызвать его из клиента. Его можно развернуть, выбрав Сборка > Развернуть решение в Visual Studio.

    Для его вызова также потребуется имя семейства пакетов поставщика службы приложений. Его можно получить, открыв файл Package.appxmanifest проекта AppServiceProvider в представлении конструктора (дважды щелкните его в Обозреватель решений). Перейдите на вкладку Упаковка , скопируйте значение рядом с полем Имя семейства пакетов и вставьте его в другое место, например Блокнот.

    Написание клиента для вызова службы приложений

    1. Добавьте в решение новый пустой проект универсального приложения для Windows (для этого последовательно выберите пункты Файл > Добавить > Создать проект). В диалоговом окне Добавление нового проекта выберите Установленное > пустое приложение Visual C# > (универсальные приложения Для Windows) и назовите его ClientApp.
    2. В проекте ClientApp добавьте следующий оператор using в начало файла MainPage.xaml.cs:
    using Windows.ApplicationModel.AppService; 
    private AppServiceConnection inventoryService; private async void button_Click(object sender, RoutedEventArgs e) < // Add the connection. if (this.inventoryService == null) < this.inventoryService = new AppServiceConnection(); // Here, we use the app service name defined in the app service // provider's Package.appxmanifest file in the section. this.inventoryService.AppServiceName = "com.microsoft.inventory"; // Use Windows.ApplicationModel.Package.Current.Id.FamilyName // within the app service provider to get this value. this.inventoryService.PackageFamilyName = "Replace with the package family name"; var status = await this.inventoryService.OpenAsync(); if (status != AppServiceConnectionStatus.Success) < textBox.Text= "Failed to connect"; this.inventoryService = null; return; >> // Call the service. int idx = int.Parse(textBox.Text); var message = new ValueSet(); message.Add("Command", "Item"); message.Add("ID", idx); AppServiceResponse response = await this.inventoryService.SendMessageAsync(message); string result = ""; if (response.Status == AppServiceResponseStatus.Success) < // Get the data that the service sent to us. if (response.Message["Status"] as string == "OK") < result = response.Message["Result"] as string; >> message.Clear(); message.Add("Command", "Price"); message.Add("ID", idx); response = await this.inventoryService.SendMessageAsync(message); if (response.Status == AppServiceResponseStatus.Success) < // Get the data that the service sent to us. if (response.Message["Status"] as string == "OK") < result += " : Price = " + response.Message["Result"] as string; >> textBox.Text = result; > 

    Замените имя семейства пакетов в строке this.inventoryService.PackageFamilyName = «Replace with the package family name»; именем семейства пакета проекта AppServiceProvider, которое вы получили выше в разделе Развертывание приложения службы и получение имени семейства пакетов.

    Примечание Вставьте строковый литерал, а не в переменную. Он не будет работать, если вы используете переменную.

    Образец приложения, в котором отображаются данные: Chair price=88.99

    Сначала код устанавливает связь со службой приложения. Подключение останется открытым, пока вы не удалите объект this.inventoryService . Имя службы приложений должно соответствовать атрибуту AppService элемента Name , добавленного в файл Package.appxmanifest проекта AppServiceProvider. В нашем примере поисковый запрос будет выглядеть так: . Создается значение ValueSet с именем message , чтобы указать команду, которую мы хотим отправить в службу приложений. Пример службы приложения будет ждать команду, чтобы указать, какое из 2 действий необходимо выполнить. Мы получаем индекс из текстового поля в клиентском приложении, а затем вызываем службу с Item помощью команды , чтобы получить описание элемента. Затем с помощью команды Price мы получаем цену элемента. Результат используется в качестве текста кнопки. Поскольку AppServiceResponseStatus указывает, удалось ли операционной системе подключаться к службе приложений, мы проверяем Status ключ в методе ValueSet, полученном из службы приложений, чтобы убедиться, что он смог выполнить получения.

  2. Задайте проект ClientApp в качестве запускаемого проекта (щелкните его правой кнопкой мыши в Обозреватель решений>Настроить как запускаемый проект) и запустите решение. Введите число 1 в текстовое поле и нажмите кнопку. Служба возвратит следующие данные: «Chair : Price = 88.99».

Если вызов службы приложений завершается сбоем, проверка в проекте ClientApp следующее:

  1. Убедитесь, что имя семейства пакетов, назначенное подключению к службе инвентаризации, совпадает с именем семейства пакетов приложения AppServiceProvider . См. строку в button_Click с this.inventoryService.PackageFamilyName = «. «; .
  2. В button_Click убедитесь, что имя службы приложений, назначенное подключению к службе инвентаризации, совпадает с именем службы приложений в файле Package.appxmanifestAppServiceProvider. См. this.inventoryService.AppServiceName = «com.microsoft.inventory»; .
  3. Убедитесь, что приложение AppServiceProvider развернуто. (В Обозреватель решений щелкните правой кнопкой мыши решение и выберите Развернуть решение.

Отладка службы приложений

  1. Перед отладкой убедитесь, что решение развернуто, так как перед вызовом службы необходимо развернуть приложение поставщика службы приложений. (Для этого в Visual Studio последовательно выберите пункты Сборка > Развернуть решение).
  2. В Обозреватель решений щелкните правой кнопкой мыши проект AppServiceProvider и выберите Свойства. На вкладке Отладка измените значение параметра Действие при запуске на Не запускать, а отлаживать мой код при открытии. (Обратите внимание, что при использовании C++ для реализации поставщика службы приложений на вкладке Отладка необходимо изменить значение параметра Запуск приложения на Нет.)
  3. В проекте MyAppService в файле Inventory.cs установите точку останова в OnRequestReceived.
  4. Задайте проект AppServiceProvider в качестве запускаемого проекта и нажмите клавишу F5.
  5. Запустите ClientApp из меню «Пуск» (не из Visual Studio).
  6. Введите число 1 в текстовое поле и нажмите кнопку. Отладчик остановится на вызове службы приложений в точке ее останова.

Отладка клиента

  1. Для отладки клиента, вызывающего службу приложений, выполните инструкции из предыдущего шага.
  2. Запустите ClientApp из меню «Пуск».
  3. Подключите отладчик к процессуClientApp.exe (а не к процессуApplicationFrameHost.exe ). (В Visual Studio последовательно выберите пункты Отладка > Присоединиться к процессу. ).
  4. В проекте ClientApp задайте точку останова в button_Click.
  5. Точки останова в клиенте и службе приложений теперь будут отображаться при вводе числа 1 в текстовое поле ClientApp и нажатии кнопки.

Устранение общих неполадок службы приложений

Если после попытки подключиться к службе приложений возникает состояние AppUnavailable, проверка следующее:

  • Убедитесь, что проект поставщика службы приложений и проект службы приложений развернуты. Необходимо развернуть оба проекта перед запуском клиента, так как в противном случае клиенту не к чему будет подключаться. Вы можете выполнить развертывание из Visual Studio с помощью команды Build>Deploy Solution .
  • В Обозреватель решений убедитесь, что проект поставщика службы приложений содержит ссылку между проектами на проект, реализующий службу приложений.
  • Убедитесь, что запись и ее дочерние элементы добавлены в файл Package.appxmanifest , принадлежащий проекту поставщика службы приложений, как указано выше в разделе Добавление расширения службы приложений в Package.appxmanifest.
  • Убедитесь, что строка AppServiceConnection.AppServiceName в клиенте, вызывающая поставщика службы приложений, совпадает с строкой, указанной в файле Package.appxmanifest проекта поставщика службы приложений.
  • Убедитесь, что AppServiceConnection.PackageFamilyName соответствует имени семейства пакетов компонента поставщика службы приложений, как указано выше в разделе Добавление расширения службы приложений в Package.appxmanifest.
  • Для сторонних служб приложений, таких как в этом примере, убедитесь, что EntryPoint указанный в элементе файла Package.appxmanifest элемента проекта службы приложений соответствует пространству имен и имени класса общедоступного класса, реализующего IBackgroundTask в проекте службы приложений.

Устранение неполадок отладки

Если отладчик не останавливается на точках останова в проекте поставщика службы приложений или проекте службы приложений, выполните следующие действия.

  • Убедитесь, что проект поставщика службы приложений и проект службы приложений развернуты. Оба проекта должны быть развернуты перед запуском клиента. Их можно развернуть из Visual Studio с помощью команды Сборка>развертывания решения.
  • Убедитесь, что проект, который требуется отлаживать, задан как запускаемый и что свойства отладки для этого проекта не запускаются при нажатии клавиши F5 . Щелкните правой кнопкой мыши проект, выберите пункт Свойства и щелкните Отладка (или Отладка в C++). При работе на C# измените значение параметра Действие при запуске на Не запускать, а отлаживать мой код при открытии. При работе на C++ задайте для параметра Запуск приложения значение Нет.

Комментарии

В этом примере показано, как создать службу приложений, которая выполняется как фоновая задача, и как вызвать ее из другого приложения. Следует отметить следующие ключевые моменты:

  • Создайте фоновую задачу для размещения службы приложений.
  • windows.appService Добавьте расширение в файл Package.appxmanifest поставщика службы приложений.
  • Получите имя семейства пакетов поставщика службы приложений, чтобы мы могли подключиться к нему из клиентского приложения.
  • Добавьте ссылку между проектами из проекта поставщика службы приложений в проект службы приложений.
  • Используйте Windows.ApplicationModel.AppService.AppServiceConnection для вызова службы.

Полный код MyAppService

using System; using Windows.ApplicationModel.AppService; using Windows.ApplicationModel.Background; using Windows.Foundation.Collections; namespace MyAppService < public sealed class Inventory : IBackgroundTask < private BackgroundTaskDeferral backgroundTaskDeferral; private AppServiceConnection appServiceconnection; private String[] inventoryItems = new string[] < "Robot vacuum", "Chair" >; private double[] inventoryPrices = new double[] < 129.99, 88.99 >; public void Run(IBackgroundTaskInstance taskInstance) < // Get a deferral so that the service isn't terminated. this.backgroundTaskDeferral = taskInstance.GetDeferral(); // Associate a cancellation handler with the background task. taskInstance.Canceled += OnTaskCanceled; // Retrieve the app service connection and set up a listener for incoming app service requests. var details = taskInstance.TriggerDetails as AppServiceTriggerDetails; appServiceconnection = details.AppServiceConnection; appServiceconnection.RequestReceived += OnRequestReceived; >private async void OnRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args) < // Get a deferral because we use an awaitable API below to respond to the message // and we don't want this call to get canceled while we are waiting. var messageDeferral = args.GetDeferral(); ValueSet message = args.Request.Message; ValueSet returnData = new ValueSet(); string command = message["Command"] as string; int? inventoryIndex = message["ID"] as int?; if (inventoryIndex.HasValue && inventoryIndex.Value >= 0 && inventoryIndex.Value < inventoryItems.GetLength(0)) < switch (command) < case "Price": < returnData.Add("Result", inventoryPrices[inventoryIndex.Value]); returnData.Add("Status", "OK"); break; >case "Item": < returnData.Add("Result", inventoryItems[inventoryIndex.Value]); returnData.Add("Status", "OK"); break; >default: < returnData.Add("Status", "Fail: unknown command"); break; >> > else < returnData.Add("Status", "Fail: Index out of range"); >// Return the data to the caller. await args.Request.SendResponseAsync(returnData); // Complete the deferral so that the platform knows that we're done responding to the app service call. // Note for error handling: this must be called even if SendResponseAsync() throws an exception. messageDeferral.Complete(); > private void OnTaskCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason) < if (this.backgroundTaskDeferral != null) < // Complete the service deferral. this.backgroundTaskDeferral.Complete(); >> > > 

Связанные темы

  • Преобразование службы приложений для ее запуска в одном процессе с ведущим приложением
  • Поддержка приложения с помощью фоновых задач
  • Пример приложения службы приложений (C# и C++/WinRT)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *