1.AppServices in Universal Windows Platform(UWP)
UWP 应用服务可以提供给另一个UWP应用。在Win10系统中,一个应用服务当作应用的一个方法和机制来提供服务给其他应用。
一个后台任务的应用服务工作的形式(你可以在后台跑代码,通过后台接口实现)。前台客户端可以引用另一个应用的服务在后台中执行任务。
应用服务就像web 服务一样在Win10设备中使用。
首先,让我们来创建一个 Windows Runtime Component (Universal Windows) 项目 命名"MyCalculatorService"。 这会是我们的计算服务应用。
创建一个以Calculator 为类名的 实现 IBackgroundTask接口。在WCF技术中,你可以说这个类是我们的带操作契约的服务契约
public sealed class Calculator : IBackgroundTask { private BackgroundTaskDeferral backgroundTaskDeferral; private AppServiceConnection appServiceConnection; public void Run(IBackgroundTaskInstance taskInstance) { this.backgroundTaskDeferral = taskInstance.GetDeferral(); var details = taskInstance.TriggerDetails as AppServiceTriggerDetails; appServiceConnection = details.AppServiceConnection; appServiceConnection.RequestReceived += OnRequestReceived; taskInstance.Canceled += OnTaskCanceled; } private async void OnRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args) { var messageDeferral = args.GetDeferral(); ValueSet message = args.Request.Message; ValueSet returnData = new ValueSet(); string command = message["Command"] as string; //Add, Subtract, Multiply, Divide int? firstNumber = message["Input1"] as int?; int? secondNumber = message["Input2"] as int?; int? result = 0; if (firstNumber.HasValue && secondNumber.HasValue) { switch (command) { case "Add": { result = firstNumber + secondNumber; returnData.Add("Result", result.ToString()); returnData.Add("Status", "Complete"); break; } case "Subtract": { result = firstNumber - secondNumber; returnData.Add("Result", result.ToString()); returnData.Add("Status", "Complete"); break; } case "Multiply": { result = firstNumber * secondNumber; returnData.Add("Result", result.ToString()); returnData.Add("Status", "Complete"); break; } case "Divide": { result = firstNumber / secondNumber; returnData.Add("Result", result.ToString()); returnData.Add("Status", "Complete"); break; } default: { returnData.Add("Status", "Fail: unknown command"); break; } } } await args.Request.SendResponseAsync(returnData); messageDeferral.Complete(); } private void OnTaskCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason) { if (this.backgroundTaskDeferral != null) { this.backgroundTaskDeferral.Complete(); } } }