我们使用连接到AWS SNS服务的AWS SDK工具包在vs 2010中设计了WebService应用程序。
当我们从VS 2010开发工作室直接运行时,它非常有用 但是当我们将webservice发布到本地IIS或专用的web服务器时,它就失败了 以下错误消息。
Amazon.Runtime.AmazonServiceException: Unable to find credentials
Exception 1 of 4:
System.ArgumentException: Path cannot be the empty string or all whitespace.
Parameter name: path
at System.IO.Directory.GetParent(String path)
at Amazon.Runtime.StoredProfileAWSCredentials.DetermineCredentialsFilePath(String profilesLocation)
at Amazon.Runtime.StoredProfileAWSCredentials..ctor(String profileName, String profilesLocation)
at Amazon.Runtime.EnvironmentAWSCredentials..ctor()
at Amazon.Runtime.FallbackCredentialsFactory.<Reset>b__1()
at Amazon.Runtime.FallbackCredentialsFactory.GetCredentials(Boolean fallbackToAnonymous)
Exception 2 of 4:
System.ArgumentException: Path cannot be the empty string or all whitespace.
Parameter name: path
at System.IO.Directory.GetParent(String path)
at Amazon.Runtime.StoredProfileAWSCredentials.DetermineCredentialsFilePath(String profilesLocation)
at Amazon.Runtime.StoredProfileAWSCredentials..ctor(String profileName, String profilesLocation)
at Amazon.Runtime.FallbackCredentialsFactory.<Reset>b__2()
at Amazon.Runtime.FallbackCredentialsFactory.GetCredentials(Boolean fallbackToAnonymous)
Exception 3 of 4:
System.InvalidOperationException: The environment variables AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY were not set with AWS credentials.
at Amazon.Runtime.EnvironmentVariablesAWSCredentials..ctor()
at Amazon.Runtime.FallbackCredentialsFactory.<Reset>b__3()
at Amazon.Runtime.FallbackCredentialsFactory.GetCredentials(Boolean fallbackToAnonymous)
Exception 4 of 4:
Amazon.Runtime.AmazonServiceException: Unable to reach credentials server
at Amazon.Runtime.InstanceProfileAWSCredentials.GetContents(Uri uri)
at Amazon.Runtime.InstanceProfileAWSCredentials.<GetAvailableRoles>d__0.MoveNext()
at Amazon.Runtime.InstanceProfileAWSCredentials.GetFirstRole()
at Amazon.Runtime.FallbackCredentialsFactory.<Reset>b__4()
at Amazon.Runtime.FallbackCredentialsFactory.GetCredentials(Boolean fallbackToAnonymous)
at Amazon.Runtime.FallbackCredentialsFactory.GetCredentials(Boolean fallbackToAnonymous)
at Amazon.SimpleNotificationService.AmazonSimpleNotificationServiceClient..ctor()
at CellicaAwsSnsService..ctor()
at Service..ctor()
答案 0 :(得分:14)
在可以从Web服务应用程序访问此路径的任何路径上创建凭证文件 例如。 C:\ awsfile \凭据 但请记住,不要给这个文件任何扩展名 文件应包含以下数据。
[default]
aws_access_key_id=[your_access_key]
aws_secret_access_key=[your_secret_key]
在此之后,您需要在Web.config文件中的appsetting标记中设置路径:
<appSettings>
<add key="AWSProfilesLocation" value="C:\awsfile\credentials" />
<add key="AWSRegion" value="us-east-1" />
</appSettings>
答案 1 :(得分:1)
在AWS Explorer for Visual Studio中,您可以创建在AWS上为您提供不同权限的用户配置文件,然后您可以选择要在AWS Explorer中使用的配置文件。这些配置文件仅适用于您的Windows用户帐户,如果其他人使用您的计算机,则他们必须创建自己的配置文件。您在用户帐户下运行的任何软件也可以使用这些配置文件。
如果您没有将应用程序配置为使用特定的配置文件,那么它将使用default
配置文件。
出现此问题的原因是IIS在与您登录的用户帐户不同的用户帐户下运行,因此无法访问您的AWS配置文件。
有几种方法可以告诉您的应用程序在运行时使用哪个AWS配置文件(请参阅https://console.aws.amazon.com/iam/home?region=us-east-1#/users)。开发人员最简单的选择是创建凭证文件并从web.config引用该文件。例如,如果您创建一个名为C:\aws\credentials
的文件,则可以通过将此文件添加到您的web.config文件来告诉您的应用程序使用此凭据文件中的profile2。
<configuration>
<configSections>
<section name="aws" type="Amazon.AWSSection, AWSSDK.Core" />
</configSections>
<aws
region="us-east-1"
profileName="profile2"
profilesLocation="C:\aws\credentials" />
</configuration>
凭证文件的内容应与此类似:
[profile1]
aws_access_key_id = {accessKey}
aws_secret_access_key = {secretKey}
[profile2]
aws_access_key_id = {accessKey}
aws_secret_access_key = {secretKey}
要获取访问密钥和密钥,请转到AWS {{}} {s}}控制台上的AWS IAM控制台,然后选择&#34;安全凭证&#34;选项卡然后单击&#34;创建访问密钥&#34;按钮。