我正在尝试使用ServiceStack .Redis.Core库(版本1.0.44)从我的Lambda函数中利用AWS Elasticache(Redis)。从我的本地机器(mac osx)运行lambda时一切正常;我可以毫无错误地与AWS Redis缓存进行交互。
但是,当我将我的功能部署到AWS以在其lambda服务器上执行时,代码不再有效,ServiceStack.Text.Env库会抛出PlatformNotSupportedException异常:
{
"errorType": "RedisException",
"errorMessage": "[13:50:14.793] Unable to Connect: sPort: 55382, Error: The type initializer for 'ServiceStack.Text.Env' threw an exception.
at ServiceStack.Redis.RedisNativeClient.FlushSendBuffer()
at ServiceStack.Redis.RedisNativeClient.SendReceive[T](Byte[][] cmdWithBinaryArgs, Func`1 fn, Action`1 completePipelineFn, Boolean sendWithoutRead)",
"stackTrace": [
"at ServiceStack.Redis.RedisNativeClient.CreateConnectionError(Exception originalEx)",
"at ServiceStack.Redis.RedisNativeClient.SendReceive[T](Byte[][] cmdWithBinaryArgs, Func`1 fn, Action`1 completePipelineFn, Boolean sendWithoutRead)",
"at ServiceStack.Redis.RedisNativeClient.get_Info()",
"at ServiceStack.Redis.RedisClient.GetServerRole()",
"at ServiceStack.Redis.RedisResolver.CreateRedisClient(RedisEndpoint config, Boolean master)",
"at ServiceStack.Redis.RedisManagerPool.GetClient()",
**snip**
"at lambda_method(Closure , Stream , Stream , ContextInfo )"
],
"cause": {
"errorType": "TypeInitializationException",
"errorMessage": "The type initializer for 'ServiceStack.Text.Env' threw an exception.",
"stackTrace": [
"at ServiceStack.Redis.RedisNativeClient.FlushSendBuffer()",
"at ServiceStack.Redis.RedisNativeClient.SendReceive[T](Byte[][] cmdWithBinaryArgs, Func`1 fn, Action`1 completePipelineFn, Boolean sendWithoutRead)"
],
"cause": {
"errorType": "PlatformNotSupportedException",
"errorMessage": "Operation is not supported on this platform.",
"stackTrace": [
"at System.Runtime.InteropServices.OSPlatform.get_Linux()",
"at ServiceStack.Text.Env..cctor()"
]
}
}
}
在AWS Lambda中运行时,是否可以使用ServiceStack.Redis.Core包?
答案 0 :(得分:3)
此异常是由于AWS Lambda没有实现.NET Core的RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
API来检测正在运行App的操作系统。
我只是added a fix to catch这个未实现的API,可以从v4.5.15获得,现在是available on MyGet。