UWP AppServiceConnection 没有获得价值

Tas*_*key 2 c# uwp

我正在尝试通过AppServiceConnection. 我在我的主机应用程序中使用以下代码:

using (var connection = new AppServiceConnection())
{
    connection.AppServiceName = extension.AppServiceName;
    connection.PackageFamilyName = extension.PackageFamilyName;

    var connectionStatus = await connection.OpenAsync();

    if (connectionStatus == AppServiceConnectionStatus.Success)
    {
        var response = await connection.SendMessageAsync(requestMessage);

        if (response.Status == AppServiceResponseStatus.Success)
            returnValue = response.Message as ValueSet;
    }
}
Run Code Online (Sandbox Code Playgroud)

还有我的服务代码:

private async void OnRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
{
    var messageDeferral = args.GetDeferral();
    var message = args.Request.Message;
    var returnData = new ValueSet();

    var command = message["Command"] as string;

    switch (command)
    {
        case "ACTION":
            var value = await AsyncAction();
            returnData = new ValueSet { { "Value", JsonConvert.SerializeObject(value) } };
            break;                
        default:
            break;
    }

    await args.Request.SendResponseAsync(returnData);
    messageDeferral.Complete();
}
Run Code Online (Sandbox Code Playgroud)

这在某些时候有效,但其他时候ValueSet( returnValue) 在主机接收时随机为空。它Value在服务中返回时包含在其中,但是当我在主机中收到响应时,什么也没有。

我已经验证该服务确实在设置值,将其添加到ValueSet并正确返回。

请注意,我的服务正在接收请求,主机正在接收响应,响应状态为Success; 连接失败不是问题。

有时这只会在请求再次开始工作之前发生一次,其他时候它会连续发生十次。

故障后的第一个工作响应总是比正常情况花费更长的时间。

此外,我在从主机到服务的请求中没有任何问题。它始终为出现问题的主机服务。

有没有其他人遇到过这个问题并弄清楚了?

Tas*_*key 6

在创建示例应用程序的过程中,我意识到了问题所在。我在我的线路之前执行了一个异步操作(虽然很短)var messageDeferral = args.GetDeferral();。这似乎允许后台任务在响应主机之前关闭。只需将该行移动到OnRequestReceived函数的开头即可为我解决问题。

因此,对于遇到类似问题的任何人,请在做任何其他事情之前获得延期!省去我经历的痛苦吧。