Errore durante l'aggiunta di autorizzazioni a un argomento Amazon SNS quando si utilizzano le librerie .NET

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

  •  27-09-2019
  •  | 
  •  

Domanda

Quando si tenta di aggiungere le autorizzazioni a un argomento Amazon SNS utilizzando il AWS SDK per .NET /1.1 .0.1 utilizzando il codice simile al seguente:

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

viene restituito il seguente messaggio di errore:

<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> 
È stato utile?

Soluzione

Aggiorna - Questo è stato risolto nell'ultima versione delle API .NET in modo che chiunque continui a riscontrare questo problema dovrebbe eseguire l'aggiornamento alla 1.1.1 versione delle API.


Mi ha portato un po 'per capire cosa stava succedendo e ho finito per dover utilizzare la versione HTTP dei clienti, così come Wireshark a guardare cosa stava succedendo, ma sembra che ci sia un bug in AWS SDK per .NET / 1.1.0.1. Quando ho scritto una funzione simile utilizzando il AWS SDK per Java cose dimostrato di funzionare bene, il seguente è un piccolo blocco di tale codice:

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

Guardando ciò che stava accadendo con Wireshark alzato il seguente, con alcuni minori censurare e modificare per chiarezza:

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

Come si può vedere, l'AWS SDK per .NET sta facendo una chiamata utilizzando AWSAccountIds e ActionNames al contrario di AWSAccountId e ActionName utilizzato dalla Java SDK AWS che spiega il messaggio di errore che è stato restituito.

Per il momento non sembra essere molto che si può fare su di esso a corto di non utilizzare il comando nelle applicazioni .NET e scrivere il proprio codice per effettuare la chiamata. Con tutta la fortuna che questo sarà fissato in un aggiornamento per l'SDK.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top