Подключение мобильного приложения Azure к таблице SQL Azure - PullRequest
0 голосов
/ 05 мая 2019

Я работаю над проектом Azure, который содержит несколько ресурсов (веб-приложение, база данных SQL, мобильное приложение, концентратор IOT и т. Д.).Мы хотим иметь одну базу данных SQL, с которой будут работать все части проекта (например, веб-приложение, мобильное приложение, функции и т. Д.).К сожалению, я не могу подключить свое собственное мобильное приложение к базе данных SQL.

Мы создали группу ресурсов, которая содержит все ресурсы, включая базу данных SQL.Теперь я хочу иметь возможность запрашивать базу данных из мобильного приложения.Я работаю с родным приложением Android.Я попытался следовать инструкциям на https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-android-how-to-use-client-library и https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-node-backend-how-to-use-server-sdk, но, к сожалению, я не могу управлять соединением).

Вот что я пытался сделать:

  1. Создал базу данных SQL, мобильное приложение с бэкэндом nodeJS.
  2. Добавил строку подключения к базе данных вСлужба приложений на портале Azure (MS_TableConnectionString).
  3. Добавлена ​​таблица, созданная для базы данных SQL (в SQL Server Management Studio), в «Простые таблицы» в службе мобильных приложений на портале Azure.(Таблица была вставлена ​​с правильными столбцами, которые я создал с помощью схемы SQL).
  4. В файле app.js бэкэнда я добавил следующий код:
// Mobile Apps initialization
var mobile = azureMobileApps();
// Define the database schema that is exposed.
mobile.tables.import('./tables');

// Provide initialization of any tables that are statically defined.
mobile.tables.initialize().then(function () {
    // Add the Mobile API so it is accessible as a Web API.
    app.use(mobile);

    // Start listening on HTTP.
    app.listen(process.env.PORT || 3000);
});
Файлы json и javascript таблиц создавались автоматически в папке tables, когда я вставлял ее в Easy Tables.(Имя таблицы Things_Types).

tables

В Android Studio на главной активности у меня есть следующий код (azureClient инициализирован MobileServiceClient ранее):
private void sqlQueryTest() {
        final MobileServiceJsonTable table = this.azureClient.getTable("Things_Types");
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... params) {
                try {
                    Log.d(LOG_TAG, "Running query in background");
                    JsonElement result = table.execute().get();
                    JsonArray results = result.getAsJsonArray();
                    for (JsonElement row : results) {
                        Log.d(LOG_TAG, row.toString());
                    }
                } catch (Exception exception) {
                    Log.e(LOG_TAG, "Failed to query table", exception);
                }
                return null;
            }
        }.execute();
    }

Но, к сожалению, я не могу запроситьстол.Я получаю следующее исключение:

2019-05-05 11:02:04.903 971-1006/com.*.* E/MAIN_ACTIVITY: Failed to query table
    java.util.concurrent.ExecutionException: com.microsoft.windowsazure.mobileservices.MobileServiceException: Error while processing request.
        at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299)
        at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:286)
        at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
        at com.*.*.MainActivity$2.doInBackground(MainActivity.java:147)
        at com.*.*.MainActivity$2.doInBackground(MainActivity.java:142)
        at android.os.AsyncTask$2.call(AsyncTask.java:333)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: com.microsoft.windowsazure.mobileservices.MobileServiceException: Error while processing request.
        at com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection$1.onNext(MobileServiceConnection.java:139)
        at com.microsoft.windowsazure.mobileservices.MobileServiceClient$15.handleRequest(MobileServiceClient.java:1611)
        at com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection.start(MobileServiceConnection.java:114)
        at com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask.doInBackground(RequestAsyncTask.java:78)
        at com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask.doInBackground(RequestAsyncTask.java:35)
        at android.os.AsyncTask$2.call(AsyncTask.java:333)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:764) 
     Caused by: java.net.SocketTimeoutException: timeout
        at okio.Okio$4.newTimeoutException(Okio.java:232)
        at okio.AsyncTimeout.exit(AsyncTimeout.java:285)
        at okio.AsyncTimeout$2.read(AsyncTimeout.java:241)
        at okio.RealBufferedSource.indexOf(RealBufferedSource.java:354)
        at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:226)
        at okhttp3.internal.http1.Http1Codec.readHeaderLine(Http1Codec.java:215)
        at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)
        at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:88)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
        at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
        at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
        at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:254)
        at okhttp3.RealCall.execute(RealCall.java:92)
        at com.microsoft.windowsazure.mobileservices.http.ServiceFilterRequestImpl.execute(ServiceFilterRequestImpl.java:164)
        at com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection$1.onNext(MobileServiceConnection.java:122)
        at com.microsoft.windowsazure.mobileservices.MobileServiceClient$15.handleRequest(MobileServiceClient.java:1611) 
        at com.microsoft.windowsazure.mobileservices.http.MobileServiceConnection.start(MobileServiceConnection.java:114) 
        at com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask.doInBackground(RequestAsyncTask.java:78) 
        at com.microsoft.windowsazure.mobileservices.http.RequestAsyncTask.doInBackground(RequestAsyncTask.java:35) 
        at android.os.AsyncTask$2.call(AsyncTask.java:333) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:764) 
     Caused by: java.net.SocketException: socket is closed
        at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(ConscryptFileDescriptorSocket.java:551)
        at okio.Okio$2.read(Okio.java:140)
        at okio.AsyncTimeout$2.read(AsyncTimeout.java:237)

Стоит упомянуть, что пример TodoItem работает (когда это структурированный типизированный объект, созданный как класс Java).Однако мне нужно запросить общую таблицу SQL.Также важно отметить, что цель состоит не в том, чтобы просто запросить простую таблицу, а в том, чтобы выполнить более сложные запросы, включающие несколько таблиц.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...