字符串长度超过32768个字符时的Azure存储异常 [英] Azure Storage exception when a string length is more than 32768 characters

查看:70
本文介绍了字符串长度超过32768个字符时的Azure存储异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用程序是ASP.NET Core 1.0 Web API.如果我的控制器返回一个小字符串,则一切正常.但是,如果字符串长度大于32768,我将收到以下错误消息:

My application is an ASP.NET Core 1.0 Web API. If my controller returns a small string, everything works fine. But if the string length gets longer than 32768, i'm getting the following error message:

--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Htpp.Frame`1.<RequestProcessAsync>d__2.MoveNext()
Request Information
RequestID:440ed7db-0002-006f-742e-a28f82000000
RequestDate:Tue, 21 Mar 2017 11:30:40 GMT
StatusMessage:Bad Request
ErrorCode:PropertyValueTooLarge

这是我的控制器:

[HttpGet]
[Produces("plain/text")]
public async Task<IActionResult> GetData()
{
    return this.Ok(this.GetResponse());
}

private string GetResponse()
{
    string retVal = string.Empty;
    for (int i = 0; i < 32769; i++)
    {
        retVal = retVal + "a";
    }
    return retVal;
}

完整的错误消息:

Microsoft.WindowsAzure.Storage.StorageException: BadRequest
   at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.<ExecuteAsyncInternal>d__4`1.MoveNext() in C:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\Windows Runtime\Core\Executor\Executor.cs:line 315
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter`1.GetResult()
   at MyProjectNameLogging.AzureStorageLoggingConnector.<WriteToRequestLogAsync>d__4.MoveNext() in AzureStorageLoggingTable.cs:line 29
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.GetResult()
   at MyProjectNameLogging.Repositories.RequestLoggingRepository.<WriteToLogAsync>d__6.MoveNext() in Repositories\RequestLoggingRepository.cs:line 36
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.GetResult()
   at MyProjectNameLogging.Middleware.RequestMiddleware.<Invoke>d__2.MoveNext() in Middleware\RequestMiddleware.cs:line 69
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Swashbuckle.SwaggerUi.Application.SwaggerUiMiddleware.<Invoke>d__5.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Swashbuckle.SwaggerUi.Application.RedirectMiddleware.<Invoke>d__4.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Swashbuckle.Swagger.Application.SwaggerMiddleware.<Invoke>d__6.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.<Invoke>d__7.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware.<Invoke>d__8.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Server.Hosting.Internal.RequestServiceContainerMiddleware.<Invoke>d__3.MoveNext()
--- End of stack trace previous location where exception was thrown ---
   at System.Runtime.CompillerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompillerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Htpp.Frame`1.<RequestProcessAsync>d__2.MoveNext()
Request Information
RequestID:6d8afaf4-0002-00cd-1235-a2421e000000
RequestDate:Tue, 21 Mar 2017 12:24:57 GMT
StatusMessage:Bad Request
ErrorCode:PropertyValueTooLarge

我想返回的字符串比32768长.

I would like to return strings way longer than 32768.

有什么建议吗?

推荐答案

您遇到了字符串属性类型(

You are encountered the Azure Storage limit for the string property type (source):

Edm.String(字符串)-一个UTF-16编码的值.字符串值的大小上限为64 KB.

Edm.String (String) - A UTF-16-encoded value. String values may be up to 64 KB in size.

因为UTF-16编码的字符串需要2个字节来存储一个字符,所以最大字符串长度为32768个字符.

Because UTF-16 encoded strings require 2 bytes to store an character the maximum string length is 32768 characters.

这篇关于字符串长度超过32768个字符时的Azure存储异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆