خطأ عند إضافة أذونات إلى موضوع Amazon SNS عند استخدام مكتبات .NET
-
27-09-2019 - |
سؤال
عند محاولة إضافة أذونات إلى موضوع Amazon SNS باستخدام AWS SDK لـ .NET/1.1.0.1 باستخدام رمز مشابه لما يلي:
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>
المحلول
تحديث - تم حل هذا في أحدث إصدار من .NET API ، يجب على أي شخص لا يزال يواجه هذه المشكلة ترقية إلى 1.1.1 الإصدار من API.
أخذني لحظة لمعرفة ما يجري وانتهى بي الأمر إلى استخدام إصدار HTTP للعملاء وكذلك Wireshark لمشاهدة ما كان يحدث ، ولكن يبدو أن هناك خطأ في AWS SDK لـ .NET/1.1.0.1. عندما كتبت وظيفة مماثلة باستخدام AWS SDK لجافا أثبتت الأمور أن تعمل بشكل جيد ، فيما يلي كتلة صغيرة من هذا الرمز:
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.