UWP使用AppService向另一個UWP用戶端應用程式提供服務

來源:互聯網
上載者:User

標籤:mil   void   name   run   second   log   同事   使用   tostring   

在上篇裡,我使用的是寄宿在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 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;    }    }

注意其中的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,沒錯,我就是懶

 

UWP使用AppService向另一個UWP用戶端應用程式提供服務

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.