博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UWP App Services in Windows 10
阅读量:4329 次
发布时间:2019-06-06

本文共 5915 字,大约阅读时间需要 19 分钟。

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();            }        }    }
View Code

现在 下一步 来创建一个项目来暴露这个功能在客户端应用(类似WCF环境的宿主)

创建UWP项目 命名MyCalculatorServiceProvider。导入 MyCalculatorService 项目从引用里。

现在打开MyCalculatorServiceProvider 项目的Package.appxmanifest文件。右键打开,找到申明应用服务实例命名CalculatorService1 ,

在entry point 中键入MyCalculatorService.Calculator (看上面的代码,这是实现IBackgroundTask的类)

最后一步来运行创建的这个服务客户端,这个服务提供的应用必须要部署 在你调用服务之前。你也需要这个服务应用(MyCalculatorServiceProvider )的包名,为了调用他。

在创建一个UWP项目命名 CalculatorClient。你会注意到这个名字是以服务名定义的, 为了得到PackageFamilyName  我们有两种方法。

第一个方法:通过调用  包含在 MyCalculatorServiceProvider  项目中可以跑一下。

第二个方法:找到部署MyCalculatorServiceProvider 项目的全路径 

 

图片选中的 d1238b67-b1ef-4782-9f3e-df718d97e378_8wekyb3d8bbwe 这个就是 PackageFamilyName 

这是核心代码

public sealed partial class MainPage : Page    {    private AppServiceConnection calculatorService;    public MainPage()        {            this.InitializeComponent();        }    private async void button_Click(object sender, RoutedEventArgs e)    {        //Add the connection        if (calculatorService == null)        {            calculatorService = new AppServiceConnection();            calculatorService.AppServiceName = "CalculatorService1";            calculatorService.PackageFamilyName = "83da5395-2473-49fb-b361-37072e87e9b9_xe3s0d4n4696a";            var status = await calculatorService.OpenAsync();            if (status != AppServiceConnectionStatus.Success)            {                Result.Content = "Failed to connect";                return;            }        }        //Call the service        int num1 = int.Parse(InputtextBox1.Text);        int num2 = int.Parse(InputtextBox2.Text);        var message = new ValueSet();        message.Add("Command", Operation.SelectionBoxItem);        message.Add("Input1", num1);        message.Add("Input2", num2);        AppServiceResponse response = await calculatorService.SendMessageAsync(message);        string result = "";        if (response.Status == AppServiceResponseStatus.Success)        {            //Get the data that the service sent            if (response.Message["Status"] as string == "Complete")            {                result = response.Message["Result"] as string;            }        }        message.Clear();        ResulttextBlock.Text = result;    }    }
View Code

 

2.

3.

4.先安装应用服务(服务寄宿在UWP应用里,部署即可),在安装客户端。

5.打开客户端开始计算,就好找到本台机器应用服务程序。(只限同一台机器)

 引用:

 

如果要使用UWP在本台计算机访问其他电脑的WCF服务的画,在App.config文件里修改baseAddress地址为192.168.X.X 这样才能找到

请看WCF文章

 

转载于:https://www.cnblogs.com/luquanmingren/p/7692305.html

你可能感兴趣的文章
C++练习 | 模板与泛式编程练习(1)
查看>>
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>
[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
查看>>
BABOK - 需求分析(Requirements Analysis)概述
查看>>
第43条:掌握GCD及操作队列的使用时机
查看>>
Windows autoKeras的下载与安装连接
查看>>
CMU Bomblab 答案
查看>>
微信支付之异步通知签名错误
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
技术分析淘宝的超卖宝贝
查看>>
i++和++1
查看>>