SNS GetEndpointAttributes&发布到.Net SDK中不可用的端点

时间:2014-01-31 20:28:02

标签: .net amazon-web-services amazon-sns

我正在使用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”

1 个答案:

答案 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;
    }

希望这对你有所帮助。