Работает ли ExecuteQuerySegmentedAsyn c в WebForms, запущенной в 4.6.1? - PullRequest
0 голосов
/ 14 января 2020

У меня есть старое приложение, которое я поддерживаю. Мне нужно получить доступ к некоторым данным, которые мы сейчас храним в Azure табличном хранилище. Приложение построено на 4.6.1 и ссылки WindowsAzure. Хранение 9.3.3. Предполагая учетную запись с таблицей и определенным запросом, когда я запускаю следующий код, первый возвращается быстро, а другой зависает. Если я удаляю

<httpRuntime targetFramework="4.6.1" />

, оба набора кода возвращаются. Проблема в том, что без запуска в 4.6.1 по умолчанию используется 4.0, который не поддерживает TLS 1.2.

Код:

TableContinuationToken token = null;
do
{
    var segment = cloudTable.ExecuteQuerySegmented<T>(tableQuery, token);
    token = segmentAsync.ContinuationToken;
} while (token != null);

token = null;
do
{
    var segmentAsync = await cloudTable.ExecuteQuerySegmentedAsync<T>(tableQuery, token);
    token = segmentAsync.ContinuationToken;
} while (token != null);

1 Ответ

1 голос
/ 15 января 2020

Метод ExecuteQuerySegmentedAsync работает в WebForms, работающем в. NET framework 4.6.1.

Я использую WindowsAzure.Storage 9.3.3, без удаления <httpRuntime targetFramework="4.6.1" />, и он может работать.

Примечание: Это простой тестовый код, доказывающий, что ExecuteQuerySegmentedAsync может работать. Если у вас все еще есть проблемы, предоставьте заполненный код.

Простой код в методе Default.aspx.cs -> Page_Load:

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;
using System;
using System.Web.UI;

namespace WebApplication15
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            string connstr = "DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=xxx;EndpointSuffix=core.windows.net";
            var storageAccount = CloudStorageAccount.Parse(connstr);
            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
            CloudTable table = tableClient.GetTableReference("test22");

            TableQuery<CustomerEntity> query =
                    new TableQuery<CustomerEntity>().Where(
                            TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "r1")
                        );

            TableContinuationToken token = null;
            do
            {
                var segment = table.ExecuteQuerySegmented<CustomerEntity>(query, token);
                token = segment.ContinuationToken;
            } while (token != null);

            token = null;
            do
            {
                var segmentAsync = table.ExecuteQuerySegmentedAsync<CustomerEntity>(query, token).GetAwaiter().GetResult();
                token = segmentAsync.ContinuationToken;
            } while (token != null);

        }

    }
}

Результат:

enter image description here

...