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

时间:2018-04-04 11:53:17

标签: azure azure-mobile-services azure-android-sdk

此问题特定于Azure移动应用Android sdk最近的奇怪行为。一切都运作良好数周。现在,我的Android客户端应用程序突然无法连接到我的网络应用程序了。 Toast在处理请求时说“#34;错误”#34;。在Android Studio调试器中,我在SDK文件MobileServiceConnection.java中找到了异常。

java.io.IOException: stream was reset: PROTOCOL_ERROR

在Azure门户中,我的应用程序显示"健康"状态,但我可以看到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();
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

我自己找到了答案。该错误是由Azure App Service HTTP2连接问题引起的。它与应用程序代码无关。对于任何面临同样问题的人来说,这就是解决方案。

  1. 转到https://resources.azure.com/
  2. 单击名称左侧的选项,确保您处于读/写模式。
  3. 从左栏中,浏览至:https://resources.azure.com/subscriptions/yourSubscriptionId/resourceGroups/yourWebAppResourceGroup/providers/Microsoft.Web/sites/yourWebAppName/config/web
  4. 查找并更改属性:&#34; http20Enabled&#34;:单击“编辑”,“将值更新为”,然后单击“保存”或“修补”,将其从true更改为false。