我的团队正在设置一个带有 Walrus 的 Eucalyptus 服务器,我们想用它来对我们的 C# 代码运行测试,该代码使用亚马逊的 AWS 东西。它几乎设置好了,我们现在将代码指向 Eucalyptus,但我们遇到了一些困难。
我们首先调用 PutBucket 来创建我们将使用的存储桶。该存储桶以前不存在,因此应该没有任何问题。然而,我们得到一个空引用异常,堆栈跟踪如下:
at System.Xml.XmlReader.CalcBufferSize(Stream input)
at System.Xml.XmlTextReaderImpl.InitStreamInput(Uri baseUri, String baseUriStr, Stream stream, Byte[] bytes, Int32 byteCount, Encoding encoding)
at System.Xml.XmlTextReaderImpl..ctor(String url, Stream input, XmlNameTable nt)
at System.Xml.XmlTextReader..ctor(Stream input)
at Amazon.S3.AmazonS3Client.transform(String responseBody, String actionName, Type t)
at Amazon.S3.AmazonS3Client.processRequestResponse[T](HttpWebResponse httpResponse, S3Request request, Type t, T& response, Exception& cause)
at Amazon.S3.AmazonS3Client.handleHttpResponse[T](S3Request userRequest, HttpWebRequest request, HttpWebResponse httpResponse, Int32 retries, Int64 lengthOfRequest, T& response, Exception& cause, HttpStatusCode& statusCode)
at Amazon.S3.AmazonS3Client.getResponseCallback[T](IAsyncResult result)
at Amazon.S3.AmazonS3Client.endOperation[T](IAsyncResult result)
at Amazon.S3.AmazonS3Client.EndPutBucket(IAsyncResult asyncResult)
at Amazon.S3.AmazonS3Client.PutBucket(PutBucketRequest request)
[at application library]
现在这就是奇怪的地方。当我们检查服务器时,存储桶已成功创建!服务器正确处理了请求并制作了我们想要的存储桶。响应返回无效,但请求已正确处理。到目前为止,问题似乎只在调用 PutBucket 时出现,因为当我们删除存储桶时,它已成功从服务器中删除,并且没有抛出异常。
到目前为止,我们对正在发生的事情感到茫然。我们怀疑海象那边有问题。也许 AWS 期待一件事,而 Walrus 正在做另一件事。也许我们没有正确配置 Eucalyptus 和/或 Walrus。我们完全不确定。
这就是我在这里发布问题的原因。我很好奇是否有人以前有过这方面的经验,或者也许可以提供一些见解。什么可能导致服务器正确处理请求但发回无效响应?为什么 Eucalyptus 会做桶,但 AWS 认为操作失败了?