我正在使用AWS SDK for .NET的v2.5.26.2,运行时版本v2.0.50727,并注意到SNS客户端无法获得GetEndpointAttributes调用,也无法在发布请求消息中定位端点Arn。
针对SNS的APi文档GetEndpointAttributes Method表明您应该能够同时执行这两项操作。
我厌倦在Aws Support Forums上问这个问题,弄清楚为什么这个电话不可用,但一个多星期后还没有收到回复。
我也尝试了几次网络搜索来解决这个问题。
是.Net SDK的限制,还是仅限于我使用的版本? 如果是这样,是否有解决方法来进行这些调用。
编辑:按要求编码代码示例(尽管对象未被识别但显示不多
GetEndpointAttributes
所以首先根据Amazon Documentation for a GetEndpointAttributes我们需要创建一个派生自虚拟类GetEndpointAttributes的类。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Amazon.SimpleNotificationService;
using Amazon.SimpleNotificationService.Model;
namespace Company.Project.Sns
{
public class SnsGetEndpointAttributes : GetEndpointAttributes
{
}
}
会产生以下编译器错误
无法找到类型或命名空间名称“GetEndpointAttributes”
答案 0 :(得分:0)
您应该尝试让订阅您的应用程序的所有端点使用其ARN发出请求。响应包含来自所有端点及其属性的集合,然后您可以搜索匹配并检索其属性:
public Dictionary<string, string> GetEndpointAttributes(string platformArn, string endpointArn)
{
var listPlatformEndpointsRequest = new ListEndpointsByPlatformApplicationRequest();
listPlatformEndpointsRequest.PlatformApplicationArn = platformArn;
var response = SnsClient.ListEndpointsByPlatformApplication(listPlatformEndpointsRequest);
Dictionary<string, string> endpointAttributes = response.Endpoints.Exists(x => x.EndpointArn.Equals(endpointArn))
? response.Endpoints.Find(x => x.EndpointArn.Equals(endpointArn)).Attributes
: null;
return endpointAttributes;
}
当您说您无法定位端点ARN时,我不确定您的意思,因为每次订阅端点时,您都应该将ARN存储在数据库中或类似的内容中。无论如何,如果您可以访问您的终端ARN,这是一个发布消息的示例:
public void SendMessage(string endpointArn, string message)
{
var request = new PublishRequest();
request.Message = message;
request.TargetArn = endpointArn;
var response = SnsClient.Publish(request);
return response;
}
希望这对你有所帮助。