在上篇里,我使用的是寄宿在WPF上的WCF进行两个程序间的通信,在解决问题的同时,我的同事也在思考能否使用UWP来做这件事。于是,我们发现了App Service,两个UWP应用沟通的桥梁。

App Service以background task 的形式允许一个UWP向其它UWP提供服务。

首先我们新建一个名为"MyCalculatorService"的Windows Runtime Component项目,新建Calculator类,实现 IBackgroundTask.接口,它很类似WCF里的ServiceContract。

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, Divideint? 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();}}}

  然后再新建一个名为MyCalculatorServiceProvider的UWP程序,充当服务端角色,相当于WCF宿主服务的。引用刚才我们创建的wind,然后在 Package.appxmanifest 中声明一个 名为CalculatorService1的App Service 实例,添加 入口点"MyCalculatorService.Calculator"。

现在我们来创建名为“CalculatorClient”的客户端,并调用以上服务。添加以下代码

public sealed partial class MainPage : Page{private AppServiceConnection calculatorService;public MainPage(){this.InitializeComponent();}private async void button_Click(object sender, RoutedEventArgs e){//Add the connectionif (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 serviceint 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 sentif (response.Message["Status"] as string == "Complete"){result = response.Message["Result"] as string;}}message.Clear();ResulttextBlock.Text = result;}}

注意其中的AppServiceName是我们在MyCalculatorServiceProvider项目中定义的App Service的Name,PackageFamilyName 是MyCalculatorServiceProvider项目的PackageFamilyName。

完成后,先部署MyCalculatorServiceProvider再部署CalculatorClient,效果是不是跟WCF很类似呢?

好吧,以上都是我从https://social.technet.microsoft.com/wiki/contents/articles/36719.wcf-app-services-in-universal-windows-platform-uwp-using-windows-10.aspx抄的,,,

示例demo可以从这里下http://www.cnblogs.com/luquanmingren/p/7692305.html,没错,我就是懒

转载于:https://www.cnblogs.com/StartAllOverAgain/p/7692555.html

UWP使用AppService向另一个UWP客户端应用程序提供服务相关推荐

  1. (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序

    (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序 原文:(1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序 版权声明:本作品采用知识共享署名-非商 ...

  2. (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序

    每次使用 Visual Studio 的模板创建一个 UWP 程序,我们会在项目中发现大量的项目文件.配置.应用启动流程代码和界面代码.然而这些文件在 UWP 程序中到底是如何工作起来的? 我从零开始 ...

  3. win10 uwp 使用 msbuild 命令行编译 UWP 程序

    原文:win10 uwp 使用 msbuild 命令行编译 UWP 程序 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http:// ...

  4. uwp连接mysql数据库_在UWP中使用SQLite数据库,支持加密

    这个库支持Xamarin.*(iOS,Android等). .NET, .NET Core.Mono.UWP等主流系统和程序.支持对数据库文件的加密,其sqlcipher加密版为sqlite-net- ...

  5. chrome扩展推荐:有我,你又省了一个ssh客户端 --- Secure Shell

    严格上说这并不是一个扩展,而是一个chrome的应用,它比扩展能实现的东东更多,是个可以单独运行的application. 还是先上图,然后再说话. 和现在阿里云和腾讯云的web控制台差不多,是一个s ...

  6. http默认超时时间_Bof 是一个HTTP客户端,旨在尽可能方便用户使用

    Bof Bof是一个HTTP客户端,旨在尽可能方便用户使用. 它使最经典的用例(例如下载文件,与JSON API交互或提交表单)尽可能地简单. 由于Bof基于Guzzle,因此可以直接使用Guzzle ...

  7. git 短写设置_如何在短短几分钟内设置一个Git客户端

    git 短写设置 Today we're going to talk about Git. You're going to learn what Git is and how to set up a ...

  8. 我的第一个REST客户端程序!

    Delphi:XE8 看了好几天的资料了,也没有弄出来一个REST程序,尝试了XE8中带的例子,也都没有搞懂.我在网上不断搜索,看是否能够找到适合自己的文章,希望能够做出来一个REST的小例子,万幸, ...

  9. onvif学习笔记8:最近写的一个ONVIF客户端的心得小结

    最近,利用业余时间编写一个简单的ONVIF客户端MFC程序,这里记录一下过程. 语言选择 在之前调查过,有用QT实现的,有用python实现的,虽然正在学python,无奈才看了3天的书,没自信去搞. ...

最新文章

  1. PTA基础编程题目集-6-7 统计某类完全平方数
  2. 史上最完整的Maven 教程
  3. 专访中科创达王璠:怎样做好嵌入式人工智能的算法开发?
  4. java正则表达式的菜鸟使用分析
  5. SpaceEmacs Rock Day5 学习笔记
  6. ɵɵtemplate和ng-template的对应关系
  7. 用C语言实现津巴布韦这道算法题?
  8. unity矩阵运算,数学计算
  9. ARM 汇编指令 MRS用法
  10. 寒冬不怕!印度互联网市场潜力巨大
  11. 【论文写作】使用overleaf撰写你的会议论文
  12. 相机存储卡不小心格式化怎么恢复呢?
  13. 《每日一题》NO.21:画出CMOS 非门/与非门/或非门的结构
  14. 服务器系统https打不开网页,记录一次解决网站突然无法打开处理HTTP被封的问题...
  15. Python 使用 matplotlib 将离散的节点用光滑曲线连接
  16. 5个典型实例告诉你:什么是数据可视化
  17. 【IoT】 产品设计之α、β、λ测试
  18. 鼠标悬停下划线显示特效,html鼠标悬停显示下划线
  19. 方块填数 “数独”是当下炙手可热的智力游戏。一般认为它的起源是“拉丁方块”,是大数学家欧拉于1783年发明的。 如图[1.jpg]所示:6x6的小格被分为6个部分(图中用不同的颜色区分),每个部
  20. 如何轻松搞定各种图形化展现

热门文章

  1. 【Linux】一步一步学Linux——curl命令(193)
  2. 【Linux】一步一步学Linux——arpwatch命令(165)
  3. 遮掩java_Java炸弹:重载、重写、隐藏、遮蔽、遮掩(2)
  4. 除自身以外数组的乘积—leetcode238
  5. WinPcap pcap_next_ex抓包
  6. CFtpFileFind FindFile卡住的问题
  7. Delphi读取文本内容
  8. idea单行注释对齐修改Settings - Editor - Code Style-Code Generation,取消comment code的勾选
  9. 2018年长沙理工大学第十三届程序设计竞赛 G-逃离迷宫
  10. 轻松使用zstd来解压缩