Erreur lors de l'ajout d'autorisations à un sujet Amazon SNS lorsque vous utilisez les bibliothèques .NET

StackOverflow https://stackoverflow.com/questions/4061836

  •  27-09-2019
  •  | 
  •  

Question

Lorsque vous tentez d'ajouter des autorisations à un sujet en utilisant Amazon SNS AWS SDK pour .NET /1.1 .0.1 en utilisant un code similaire à ce qui suit:

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

Le message d'erreur suivant est renvoyé:

<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> 
Était-ce utile?

La solution

Mise à jour - Cette a été résolu dans la dernière version de l'API .NET afin que toute personne rencontrant encore ce problème devrait passer à la 1.1.1 la version de l'API.


m'a pris du temps pour comprendre ce qui se passait et je fini par avoir à utiliser la version HTTP des clients ainsi que Wireshark pour regarder ce qui se passait, mais il semble qu'il y ait un bogue dans AWS SDK pour .NET / 1.1.0.1. Quand j'ai écrit une fonction similaire en utilisant la AWS SDK pour Java les choses se sont avérées de travail très bien, ce qui suit est petit bloc de ce code:

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

Regarder ce qui se passait par Wireshark relevai ce qui suit, avec quelques censures mineur et l'édition pour plus de clarté:

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

Comme vous pouvez le voir, le AWS SDK pour .NET fait un appel à l'aide AWSAccountIds et ActionNames par opposition à AWSAccountId et ActionName utilisé par l'AWS SDK Java qui explique le message d'erreur qui a été retourné.

Pour l'instant il ne semble pas y avoir beaucoup qui peut être fait à court de ne pas utiliser la commande dans les applications .NET et écrire votre propre code pour effectuer l'appel. Avec un peu de chance cela sera corrigé dans une mise à jour du SDK.

scroll top