在 AzureMobile Apps HTTP2 错误中处理请求时出错

Error while processing request in AzureMobile Apps HTTP2 error

这个问题是针对 Azure 移动应用程序 Android sdk 最近的一个奇怪行为。数周以来一切都运行良好。现在,我的 android 客户端应用程序突然无法再连接到我的网络应用程序。吐司说 "Error while processing request"。在 Android Studio 调试器中,我在 SDK 文件 MobileServiceConnection.java.

中发现异常
java.io.IOException: stream was reset: PROTOCOL_ERROR

在 Azure 门户中,我的应用程序显示 "Healthy" 状态,但我可以看到 HTTP 错误。请帮忙。 以下是我的代码,它工作正常但现在抛出错误。

// Create the Mobile Service Client instance, using the provided mobile app URL.
            try {
                mClient = new MobileServiceClient(mMobileBackendUrl, activityContext).withFilter(

                new ServiceFilter() {
                    @Override
                    public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilter) {
                        // Get the request contents
                        String url = request.getUrl();
                        String content = request.getContent();

                        if (url != null) {
                            Log.d("Request URL:", url);
                        }

                        if (content != null) {
                            Log.d("Request Content:", content);
                        }

                        // Execute the next service filter in the chain
                        ListenableFuture<ServiceFilterResponse> responseFuture = nextServiceFilter.onNext(request);

                        Futures.addCallback(responseFuture, new FutureCallback<ServiceFilterResponse>() {
                            @Override
                            public void onFailure(Throwable exception) {
                                Log.d("Exception:", exception.getMessage());
                            }

                            @Override
                            public void onSuccess(ServiceFilterResponse response) {
                                if (response != null && response.getContent() != null) {
                                    Log.d("Response Content:", response.getContent());
                                }
                            }
                        });

                        return responseFuture;
                    }
                }
);

            setAzureClient(mClient);
            }catch(MalformedURLException e){
                createAndShowDialog(new Exception("There was an error creating the Mobile Service. Verify the URL"), "Error");
            }catch(Exception e){
                createAndShowDialog("There was an error creating the Mobile Service. "+ e.toString(), "Error");
            }

            Toast.makeText(context, context.getString(R.string.online_authentication), Toast.LENGTH_SHORT).show();
            authenticate();

    }

    private void authenticate() { // give access only to authenticated users via Google account authentication
        HashMap<String, String> parameters = new HashMap<>();
        parameters.put("access_type", "offline");//use "Refresh tokens"
        //login with the Google provider. This will create a call to onActivityResult() method inside the context Activity, which will then call the onActivityResult() below.
        mClient.login(MobileServiceAuthenticationProvider.Google, url_scheme_of_your_app, GOOGLE_LOGIN_REQUEST_CODE, parameters);

    }


@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // When request completes
        if (requestCode == 1) {
            try {
                MobileServiceActivityResult result = mClient.onActivityResult(data);
                if (result.isLoggedIn()) {
                    Toast.makeText(context, context.getString(R.string.azure_auth_login_success) /*+ " " + mClient.getCurrentUser().getUserId()*/, Toast.LENGTH_SHORT).show();
                    mUserId = mClient.getCurrentUser().getUserId();

                } else {//>>>>THIS IS WHERE I AM GETTING THE ERROR
                    String errorMessage = result.getErrorMessage();
                    Toast.makeText(context, errorMessage, Toast.LENGTH_SHORT).show();// Error While processing request (it comes form the MobileServiceConnection.java file inside sdk)

                }
            }catch(Exception e){
                Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
            }
        }
    }

我自己找到了答案。该错误是由于 Azure 应用服务 HTTP2 连接问题造成的。它与应用程序代码无关。对于面临同样问题的任何人,这里是解决方案。

  1. 转到https://resources.azure.com/
  2. 点击您姓名左侧的选项,确保您处于 Read/Write 模式。
  3. 从左栏浏览至:https://resources.azure.com/subscriptions/yourSubscriptionId/resourceGroups/yourWebAppResourceGroup/providers/Microsoft.Web/sites/yourWebAppName/config/web
  4. 查找并更改 属性:"http20Enabled":通过单击编辑将值从真更改为假,将值更新为“假”,然后单击保存或修补。