2010-10-31 1 views
1

При попытке добавить разрешения к теме Amazon SNS с помощью AWS SDK for .NET /1.1.0.1, используя код, подобный следующему:Ошибка при добавлении разрешения к теме Amazon SNS при использовании библиотеки .NET

AddPermissionRequest request = new AddPermissionRequest() 
    .WithActionNames(new[] { "Publish" }) 
    .WithAWSAccountIds(new[] { "xxx" }) 
    .WithLabel("PrincipleAllowControl") 
    .WithTopicArn(resourceName); 
client.AddPermission(request); 

следующее сообщение об ошибке возвращается:

<ErrorResponse xmlns=" http://sns.amazonaws.com/doc/2010-03-31/"> 
    <Error> 
    <Type>Sender</Type> 
    <Code>ValidationError</Code> 
    <Message>2 validation errors detected: Value null at 'actionName' failed to satisfy constraint: Member must not be null; Value null at 'aWSAccountId' failed to satisfy constraint: Member must not be null</Message> 
    </Error> 
    <RequestId>45054159-e46b-11df-9b30-693941920fe7</RequestId> 
</ErrorResponse> 

ответ

1

обновление - This has been resolved в последней версии .NET API, так что каждый по-прежнему сталкивается с этой проблемой необходимо обновить до 1.1.1 version API.


Взял меня некоторое время, чтобы выяснить, что происходит, и я в конечном итоге того, чтобы использовать версию HTTP своих клиентов, а также Wireshark, чтобы посмотреть, что происходит, но это, кажется, что есть ошибка в AWS SDK для .NET/1.1.0.1. Когда я писал подобную функцию, используя AWS SDK for Java вещи доказавшие работать нормально, следующий небольшой блок этого кода:

AddPermissionRequest permissionRequest = new AddPermissionRequest() 
    .withActionNames("Publish") 
    .withAWSAccountIds("xxx") 
    .withLabel("PrincipleAllowControl") 
    .withTopicArn(resourceName); 
client.addPermission(permissionRequest); 

Наблюдая то, что происходит с помощью Wireshark оказался следующий, с некоторыми незначительными цензурирования и редактирования для ясность:

 
POST/HTTP/1.1 
Content-Type: application/x-www-form-urlencoded; charset=utf-8 
User-Agent: AWS Java SDK-1.0.14 
Host: sns.us-east-1.amazonaws.com 
Content-Length: 419 

Action=AddPermission& 
SignatureMethod=HmacSHA256& 
Label=PrincipleAllowControl& 
ActionName.member.1=Publish& 
AWSAccessKeyId=xxx& 
Version=2010-03-31& 
AWSAccountId.member.1=xxx& 
SignatureVersion=2& 
TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3A589983072084%3Axxx& 
Timestamp=2010-10-31T02%3A10%3A10.833Z& 
Signature=Bq09wa2vF1levQGcQZWVaix3UG7Mxlq2JCk4znEYHAM%3D 

POST/HTTP/1.1 
User-Agent: AWS SDK for .NET/1.1.0.1 
Content-Type: application/x-www-form-urlencoded; charset=utf-8 
Host: sns.us-east-1.amazonaws.com 
Content-Length: 422 

Action=AddPermission& 
TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3A589983072084%3Axxx& 
Label=PrincipleAllowControl& 
AWSAccountIds.member.1=xxx& 
ActionNames.member.1=Publish& 
AWSAccessKeyId=xxx& 
SignatureVersion=2& 
SignatureMethod=HmacSHA256& 
Timestamp=2010-10-30T21%3A18%3A39.753Z& 
Version=2010-03-31& 
Signature=m9OvL1v91eurDa5QYP9gwrd2crdtssHsDFonFny3frU%3D 

Как вы можете видеть, AWS SDK для .NET делает вызов, используя AWSAccountIds и ActionNames в отличие от AWSAccountId и ActionName, используемого AWS Java SDK, который объясняет сообщение об ошибке, который был возвращен.

На данный момент, похоже, не так много можно сделать, если не использовать команду в приложениях .NET и написать свой собственный код для совершения вызова. Если повезет, это будет исправлено в обновлении SDK.

+1

Amazon прокомментировал, что это будет исправлено в предстоящем обновлении API: http://developer.amazonwebservices.com/connect/thread.jspa?threadID=53822&tstart=0&messageID=201514#201514 – rjzii

Смежные вопросы