Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AmazonS3Client不适用于AWS Lambda S3项目_C#_Amazon Web Services_Amazon S3_Aws Lambda - Fatal编程技术网

C# AmazonS3Client不适用于AWS Lambda S3项目

C# AmazonS3Client不适用于AWS Lambda S3项目,c#,amazon-web-services,amazon-s3,aws-lambda,C#,Amazon Web Services,Amazon S3,Aws Lambda,我有一个简单的C#控制台项目,它正在处理S3 Bucket和S3对象。这是一个非常简单的项目,我可以找到一个对象并用AmazonS3Client阅读它。 我将此参考用于工作: AWSSDK.核心 AWSSDK.S3 例如,此功能是我的项目的一部分: public static string GetSpecialObject(string FileName, string BucketName) { AmazonS3Client client = new AmazonS3Clie

我有一个简单的C#控制台项目,它正在处理S3 Bucket和S3对象。这是一个非常简单的项目,我可以找到一个对象并用AmazonS3Client阅读它。
我将此参考用于工作:

  • AWSSDK.核心
  • AWSSDK.S3

例如,此功能是我的项目的一部分:

public static string GetSpecialObject(string FileName, string BucketName)
{
    AmazonS3Client client = new AmazonS3Client(Amazon.RegionEndpoint.EUWest1);
    // Create a GetObject request
    GetObjectRequest request = new GetObjectRequest
    {
        BucketName = BucketName,
        Key = FileName
    };
    using (GetObjectResponse response = client.GetObject(request))
    {
        using (StreamReader reader = new StreamReader(response.ResponseStream))
        {
            string contents = reader.ReadToEnd();
            return contents;
        }
    }
}
正如您看到的,它在bucket中查找一个文件,我可以返回file的值。 有什么问题?
我创建了一个AWS Lambda项目(AWS Lambda函数),并尝试在那里使用GetSpecialObject函数。(.Net核心2)
我在AWS上使用AWS工具包发布了我的新项目,但当我使用Invoke按钮运行它时,我看到以下错误:

“errorType”:“MissingMethodException”, “errorMessage:“未找到方法:'System.Collections.Generic.IList
1 Amazon.Runtime.SharedInterfaces.ICoreAmazonS3.GetAllObjectKeys(System.String、System.String、System.Collections.Generic.IDictionary
2)”, “stackTrace”:[ “在App.AWSFileClass..ctor(字符串访问密钥、字符串机密、字符串存储桶)”中, ......" ] }

似乎我们不能将这个类(AmazonS3Client)用于AWS Lambda服务。我在谷歌上搜索了很多关于它的信息。我发现我们可以在Nuget中添加一些AmazonS3库,它们的名称如下:

  • Amazon.S3
  • AWSSDK.核心
但是这些库非常脆弱。

1-在AWS Lambda(.net core 2)中是否有使用AmazonS3Client类的方法?


2-有没有建议我使用S3Client类来读取s3object?

AmazonS3Client在.NET Core 2.0中得到了明确的支持。看起来您使用的是SDK的.NET Framework版本,而不是.NET Core。我可以说,因为在您的代码中,您正在调用启用的同步GetObject调用在.NET Framework中不受支持。对于.NET Core,您应该只看到GetObjectAsync

我很好奇你是如何编译的。这段代码是在一个针对.NET框架而不是.NET标准的类库中考虑的吗


如果直接添加dll,则应改为添加NuGet包。添加AWSSDK.S3 NuGet包,并确保没有对AWSSDK.Core.dll和AWSSDK.S3.dll的任何dll引用。通过添加NuGet包,它将解析为正确的平台版本

如何调用此方法?如果这是Lambda函数,则它不是定义良好(Lambda函数必须有入口点)。这是我项目的一部分。我可以从Lambda函数main方法调用它。感谢@norm johanson的回复。我有一个C#Console应用程序,它与S3 Bucke一起工作,工作正常,使用.Net framework。但之后我想在AWS Lambda模板上使用它。所以我希望这段代码可以工作。所以我迁移到了那里。但看起来主要问题是创建AWS客户端对象。所以我使用了这个dll,它似乎与.NetCore兼容。
IAwsCredential awsCredential=new awsCredential(“*”,“*”);s3Client=new s3Client(AwsRegion.EUWest1,awsCredential)
对于这一点,我们没有GetObjectResponse。你认为呢?还有@norm johanson,有没有任何简单的例子可以使用AWS Lambda来处理getobject、list和delete。我在我的简单控制台项目中这样做了,但在AWS Lambda中,主库不起作用,这是我的问题……很抱歉进行了大量的描述。如果您是直接添加dll您应该改为添加NuGet包。添加AWSSDK.S3 NuGet包,并确保您没有对AWSSDK.Core.dll和AWSSDK.S3.dll的任何dll引用。通过添加NuGet包,它将解析为正确的平台版本。非常感谢:-)我们没有将S3目录API移植到.NET Core,因为该API是专门设计的围绕IAmazonS3中的同步API。使用ListObjects操作和在请求对象上使用设置为“/”的分隔符属性,然后在响应对象上检查CommonPrefixes属性,仍然可以实现同样的效果。